2012-02-19 7 views
2

큐브 렌더링에 문제가 있습니다. 왜 그런지는 모르겠지만 정확하지 않습니다. , 가 직면 정점 :메쉬가 올바르게 렌더링되지 않습니다.

전면 : 위로

Front

:

Back

여기는 OpenGL 코드의

다음은 "큐브"의 두 이미지입니다 색상 ..

private void initTriangle() { 
    float[] coords = { 
      -0.5f, 0.f, 0.5f, 
      -0.5f, 0.f, -0.5f, 
      0.5f, 0.f, -0.5f, 
      0.5f, 0.f, 0.5f, 
      -0.5f, 1.f, 0.5f, 
      0.5f, 1.f, 0.5f, 
      0.5f, 1.f, -0.5f, 
      -0.5f, 1.f, -0.5f, 
    }; 
    _nrOfVertices = coords.length; 

    float[] colors = { 
      1f, 0f, 0f, 1f, // point 1 red 
      0f, 1f, 0f, 1f, // point 2 green 
      0f, 0f, 1f, 1f, // point 3 blue 
      1f, 1f, 1f, 1f, // point 4 white 
      1f, 1f, 1f, 1f, // point 5 white 
      1f, 0f, 0f, 1f, // point 6 white 
      1f, 1f, 1f, 1f, // point 7 white 
      1f, 1f, 1f, 1f, // point 8 white 
      1f, 0f, 0f, 1f, // point 9 white 
      1f, 1f, 1f, 1f, // point 10 white 
      1f, 1f, 1f, 1f, // point 11 white 
      1f, 1f, 1f, 1f, // point 12 white 
    }; 

    short[] indices = new short[] { 
      1, 2, 3, // 1 
      3, 4, 1, // 2 
      5, 6, 7, // 3 
      7, 8, 5, // 4 
      1, 4, 6, // 5 
      6, 5, 1, // 6 
      4, 3, 7, // 7 
      7, 6, 4, // 8 
      3, 2, 8, // 9 
      8, 7, 3, // 10 
      2, 1, 5, // 11 
      5, 8, 2, // 12 
    }; 

    // float has 4 bytes, coordinate * 4 bytes 
    ByteBuffer vbb = ByteBuffer.allocateDirect(coords.length * 4); 
    vbb.order(ByteOrder.nativeOrder()); 
    _vertexBuffer = vbb.asFloatBuffer(); 

    // short has 2 bytes, indices * 2 bytes 
    ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2); 
    ibb.order(ByteOrder.nativeOrder()); 
    _indexBuffer = ibb.asShortBuffer(); 

    // float has 4 bytes, colors (RGBA) * 4 bytes 
    ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length * 4); 
    cbb.order(ByteOrder.nativeOrder()); 
    _colorBuffer = cbb.asFloatBuffer(); 

    _vertexBuffer.put(coords); 
    _indexBuffer.put(indices); 
    _colorBuffer.put(colors); 

    _vertexBuffer.position(0); 
    _indexBuffer.position(0); 
    _colorBuffer.position(0); 
} 

렌더링 : public void onDrawFrame (GL10 gl) { //gl.glFrontFace (GL10.GL_CCW); gl.glClearColor (0f, 0f, 0f, 1.0f); 여기 OBJ 내용

gl.glLoadIdentity(); 

    gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

    // set rotation 
    gl.glRotatef(_xAngle, 1f, 0f, 0f); 
    gl.glRotatef(_yAngle, 0f, 1f, 0f); 


    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, _vertexBuffer); 
    gl.glColorPointer(4, GL10.GL_FLOAT, 0, _colorBuffer); 
    gl.glDrawElements(GL10.GL_TRIANGLES, _nrOfVertices, GL10.GL_UNSIGNED_SHORT, _indexBuffer); 
    gl.glFrontFace(GL10.GL_CCW); 
} 

:
# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware 
# File Created: 19.02.2012 13:31:12 

mtllib box22.mtl 

# 
# object Box01 
# 

v -0.5000 0.0000 0.5000 
v -0.5000 0.0000 -0.5000 
v 0.5000 0.0000 -0.5000 
v 0.5000 0.0000 0.5000 
v -0.5000 1.0000 0.5000 
v 0.5000 1.0000 0.5000 
v 0.5000 1.0000 -0.5000 
v -0.5000 1.0000 -0.5000 
# 8 vertices 

vn 0.0000 -1.0000 -0.0000 
vn 0.0000 1.0000 -0.0000 
vn 0.0000 0.0000 1.0000 
vn 1.0000 0.0000 -0.0000 
vn 0.0000 0.0000 -1.0000 
vn -1.0000 0.0000 -0.0000 
# 6 vertex normals 

vt 1.0000 0.0000 0.0000 
vt 1.0000 1.0000 0.0000 
vt 0.0000 1.0000 0.0000 
vt 0.0000 0.0000 0.0000 
# 4 texture coords 

g Box01 
usemtl wire_177088026 
f 1/1/1 2/2/1 3/3/1 
f 3/3/1 4/4/1 1/1/1 
f 5/4/2 6/1/2 7/2/2 
f 7/2/2 8/3/2 5/4/2 
f 1/4/3 4/1/3 6/2/3 
f 6/2/3 5/3/3 1/4/3 
f 4/4/4 3/1/4 7/2/4 
f 7/2/4 6/3/4 4/4/4 
f 3/4/5 2/1/5 8/2/5 
f 8/2/5 7/3/5 3/4/5 
f 2/4/6 1/1/6 5/2/6 
f 5/2/6 8/3/6 2/4/6 
# 12 faces 

당신이 나를 도울 수 있기를 바랍니다. 귀하의 관심

감사합니다 (:.

답변

1

것은 당신의 인덱스가 올바른지 확인

OBJ 형식은 1에서 지수로 계산 시작은하지만, 배열 내에서 실제 인덱스는 0에서 시작합니다 그래서

+0

좋아, 문제는 지표 였어, 많이 고마워! – user1219731

+0

위대한. 당신은. 오신 것을 환영합니다. :) 당신이 원하는대로 작동하도록 OBJ 파일 내의 각 색인에서 1을 뺍니다. – Bart

관련 문제