내 질문에 대한 답변을 찾을 수있는 날을 찾고있었습니다. 나는 여러 웹 사이트 등을 체크 한 텍스트 북을 보았다. 내 코드가 올바르게 렌더링되어야하는 것을 볼 수있다. 난 내 얼굴을 반복적으로 오류를 찾으려고 노력하고 내 키보드에 던져있다. ( 여기있다. 나는 얼굴 당 3 인덱스를 가질 수 있도록 삼각형으로 설정된 믹서기에서 간단한 .OBJ 큐브가 있습니다. 파서 분석 8 개 총 정점 36 개 지수는. 난 그냥 도와주세요 ... 내 코드는 여기에 더 이상 무엇을 해야할지하지 않습니다! 사전에 감사합니다.OPENGL ES에서 .OBJ 큐브가 올바르게 렌더링되지 않습니다.
enter code here
this is the .OBJ file
# Blender v2.62 (sub 0) OBJ File: ''
# www.blender.org
mtllib tcubetest.mtl
o Cube
v 1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 -1.000000 1.000000
v -1.000000 -1.000000 -1.000000
v 1.000000 1.000000 -0.999999
v 0.999999 1.000000 1.000001
v -1.000000 1.000000 1.000000
v -1.000000 1.000000 -1.000000
usemtl Material
s off
f 5 1 4
f 5 4 8
f 3 7 8
f 3 8 4
f 2 6 3
f 6 7 3
f 1 5 2
f 5 6 2
f 5 8 6
f 8 7 6
f 1 2 3
f 1 3 4
이 수행되는 분석이다.
enter code here
Context context;
public ArrayList<Float> v = new ArrayList<Float>();
public ArrayList<Short> f = new ArrayList<Short>();
Parser(Context context) {
this.context = context;
BufferedReader reader = null;
String line = null;
try { // try to open file
reader = new BufferedReader(new InputStreamReader(context
.getResources().getAssets().open("tcubetest.obj")));
} catch (IOException e) {
}
try {
while ((line = reader.readLine()) != null) {
if (line.startsWith("v")) {
processVLine(line);
} else if (line.startsWith("f")) {
processFLine(line);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void processVLine(String line) {
String[] tokens = line.split("[ ]+"); // split the line at the spaces
int c = tokens.length;
for (int i = 1; i < c; i++) { // add the vertex to the vertex array
v.add(Float.valueOf(tokens[i]));
}
}
private void processFLine(String line) {
String[] tokens = line.split("[ ]+");
int c = tokens.length;
if (tokens[1].matches("[0-9]+")) {// f: v
//if (c == 4) {
for (int i = 1; i < c; i++) {
Short s = Short.valueOf(tokens[i]);
s--;
f.add(s);
}
}
}
//THIS IS THE CUBE CLASS
public class Cube {
FloatBuffer vertBuff;
ShortBuffer faceBuff;
float[] verts;
short[] faces;
Cube(ArrayList<Float> vertices, ArrayList<Short> facesa) {
verts = new float[vertices.size()];
faces = new short[facesa.size()];
for (int index = 0; index < verts.length; index++) {
verts[index] = vertices.get(index);
}
for (int index = 0; index < faces.length; index++) {
faces[index] = facesa.get(index);
}
ByteBuffer vbb = ByteBuffer.allocateDirect(verts.length * 4);
vbb.order(ByteOrder.nativeOrder());
vertBuff = vbb.asFloatBuffer();
vertBuff.put(verts);
vertBuff.position(0);
vbb = ByteBuffer.allocateDirect(faces.length * 4);
vbb.order(ByteOrder.nativeOrder());
faceBuff = vbb.asShortBuffer();
faceBuff.put(faces);
faceBuff.position(0);
}
public void draw(GL10 gl) {
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertBuff);
gl.glColor4f(1.0f, 0.0f, 0.0f, .2f);
gl.glDrawElements(GL10.GL_TRIANGLES, faces.length,
GL10.GL_UNSIGNED_BYTE, faceBuff);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
} 그리기 배열 용 어레이를 만드는 데 사용되는
enter code here
public void makeArray(float ver[], short fac[]){
finals = new float[fac.length];
for(int index = 0; index < fac.length; index++){
finals[index] = ver[fac[index]];
}
ByteBuffer vbb = ByteBuffer.allocateDirect(finals.length *4);
vbb.order(ByteOrder.nativeOrder());
vertBuff = vbb.asFloatBuffer();
vertBuff.put(finals);
vertBuff.position(0);
}
나는 첫 번째 게시물 이후로 이것을 조사 해왔다 ... 내가 생각할 수있는 모든 것을 시도했다. 코드 자체가 그렇게 복잡하지는 않습니다. 제가 잘못하고있는 것을 아는 사람이 있습니까? 부적절하게 반출되는 파일에 문제가있을 수 있습니까?
업데이트 시간. 튜토리얼을 기반으로 작동해야하는 꼭짓점과 인덱스를 수동으로로드했습니다 ... Cube 클래스에 대해 동일한 그리기 설정을 사용했으며 모든면이 완전히 그리는 것과 같은 문제가있었습니다 (그 중 절반 만 보이기 때문에). 나는 알고있다 : 나의 파서는 작동한다; 내 부하가 수동으로 입력 한 값과 일치한다는 의미로 "로딩 중"입니다. 나는 모든 것에 내게 나타나는 것을 시험해 보았다. 나는 프로그래밍을 처음부터 가르치는 데 수개월을 보냈으며 아무에게도 질문하지 않고 지금까지이 프로그램을 만들었다. 나는 정말로 도움을 지금 사용할 수 있었다. 다시 감사한다 모두.
귀하의 질문에 약간의 명료성이 적용될 수 있습니다. 어떤 종류의 문제가 있습니까? 결과는 어떻게 생깁니 까? 또한 큐브가 작동하지 않는 경우, 단일 삼각형의 obj로 시작하여 작업 할 수 있는지 알아 보는 것이 좋습니다. 그렇다면 두 개의 별개의 삼각형 등을 시도하십시오. 얼마나 멀리 얻을 수 있는지보십시오. – Tim
저는 잠시 동안 직사각형과 텍스처로 작업 해 왔습니다. 큐브는 들쭉날쭉하고 무작위로 그립니다. 나는 TRIANGLES TRIANGLE_FAN TRIANGLE_STRIPS를 사용해 보았습니다. Fan은 최선을 다했습니다. 내 문제는 인덱스와 드로잉 방법을 사용하고있는 것 같습니다. 난 .OBJ 파일을 추가하려고했지만 포럼에 newb 그래서 여기 왜 안 모르겠어요. 어쨌든 얼굴은 예를 들어 f 1 2 3f 5 6 8 ... etc –
obj 파일이 있습니다. P –