2012-02-19 33 views
2

キューブのレンダリングに問題があります。私はなぜそれが正しいのか分からない。オブジェクトメッシュが正しくレンダリングされない

フロント:バック

Front

:、、 頂点直面している:

Back

ここでは、OpenGLのコードがあります。ここ

は、 "キューブ" の2枚の画像があります色..

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); 
} 

レンダリング: 公共ボイドonDrawFrame(GL10 GL){ //gl.glFrontFace(GL10.GL_CCW)。 gl.glClearColor(0f、0f、0f、1.0f);

ここ
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); 
} 

OBJ内容:

# 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

関連する問題