2016-08-08 6 views
0

OpenGL ES 2でオブジェクト(立方体)をテクスチャで描画したいが、私にとっては奇妙な結果になっている。私が描きたいglDrawElements表示の問題

のObj - FBXファイルから抽出し、(また、私は法線を抽出することができますが、私はちょうどスキップので、それらを使用していない)のようなデータました:

----Indices----24 
0 
1 
2 
3 
4 
7 
6 
5 
0 
4 
5 
1 
1 
5 
6 
2 
2 
6 
7 
3 
4 
0 
3 
7 

----Coordinates(Vertises)----72 
1 1 -1 
1 -1 -1 
-1 -1 -1 
-1 1 -1 
1 0.999999 1 
-1 1 1 
-1 -1 1 
0.999999 -1 1 
1 1 -1 
1 0.999999 1 
0.999999 -1 1 
1 -1 -1 
1 -1 -1 
0.999999 -1 1 
-1 -1 1 
-1 -1 -1 
-1 -1 -1 
-1 -1 1 
-1 1 1 
-1 1 -1 
1 0.999999 1 
1 1 -1 
-1 1 -1 
-1 1 1 

----Texture UV----48 
0.499999 9.7692e-05 
0.499999 0.333364 
0.250049 0.333364 
0.250049 9.78112e-05 
0.250049 0.666633 
0.499999 0.666633 
0.499999 0.9999 
0.250049 0.9999 
0.74995 0.333366 
0.74995 0.666633 
0.5 0.666633 
0.5 0.333367 
0.499998 0.333366 
0.499998 0.666632 
0.250048 0.666633 
0.250048 0.333366 
0.25005 0.333367 
0.25005 0.666633 
0.000100091 0.666633 
0.000100024 0.333367 
0.749953 0.666639 
0.749953 0.333373 
0.999903 0.333373 
0.999903 0.666639 

は、だから私はバッファを外灘:

- (void)bindBuffer 
{ 
    glGenVertexArraysOES(1, &_vertextArray); 
    glBindVertexArrayOES(_vertextArray); 
    //vertises 
    glGenBuffers(1, &_vertexBuffer); 
    glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * _drawModel.numberOfVertices, _drawModel.vertices, GL_STATIC_DRAW); 

    glEnableVertexAttribArray(GLKVertexAttribPosition); 
    glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 3, NULL); 
    //textures 
    glGenBuffers(1, &_indexBuffer); 
    glBindBuffer(GL_ARRAY_BUFFER, _indexBuffer); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * _drawModel.numberOfTextCoords, _drawModel.texCoords, GL_STATIC_DRAW); 

    glEnableVertexAttribArray(attributes[ATTRIBUTES_TEXTURE_COORDINATE]); 
    glVertexAttribPointer(attributes[ATTRIBUTES_TEXTURE_COORDINATE], 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 2, NULL); 
    //indises 
    glGenBuffers(1, &_indisesBuffer); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indisesBuffer); 
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint) * _drawModel.numberOfIndises, _drawModel.indises, GL_STATIC_DRAW); 

    glBindVertexArrayOES(0); 
} 

とその結果彼らに

- (void)draw 
{ 
    glDisable(GL_DEPTH_TEST); 
    glDepthMask(GL_FALSE); 
    glDisable(GL_CULL_FACE); 
    glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    glClearColor(0.65f, 0.65f, 0.65f, 1.0f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glUseProgram(_programm); 
    glBindVertexArrayOES(_vertextArray); 

    glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, _mvpMatrix.m); 
    glUniform1i(uniforms[UNIFORM_TEXTURE], 0); 
    glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, _texture.name); 
    glDrawElements(GL_TRIANGLES, _drawModel.numberOfIndises, GL_UNSIGNED_INT, 0); 
} 

を描く私は次の得た:

iは(単に参考のため)GL_LINESモードで使用する場合:私はGL_TRIANGLESを使用する場合

enter image description here

および:

enter image description here

(参考)テクスチャ

enter image description here

gl machineのように見えますが、追加の三角形を描かないのですが、なぜそれが起こるのか、どのように修正するのですか... 提案がありますか?

---- UPDATE -----

私は

enter image description here

@ codetigerのおかげで)得た補正後の問題は、間違ったインデックスのインデックスとそれらの欠けている部分にありました

答えて

1

あなたは24の頂点を持っていますが、インデックスは最初の7つの頂点だけを参照しています。つまり、指数は間違っています。

は順番

0, 1, 2, 0, 2, 3, //front 
4, 5, 6, 4, 6, 7, //right 
8, 9, 10, 8, 10, 11, //back 
12, 13, 14, 12, 14, 15, //left 
16, 17, 18, 16, 18, 19, //upper 
20, 21, 22, 20, 22, 23 
+0

にインデックスを供給してください私はまた、uは(1から23まで)提案として指数でテストを実行しよう - その結果、それはもう少し良いでしょうが、期待できないとして...、I 8つのインデックス(キューブは8つのベリファイを持つため)が必要であると推測します。したがって、0から8までの範囲の三角形の組み合わせでなければなりません。 – gbk

+0

@gbk頂点の順番を修正しました。これはあなたのために機能するはずです。 – codetiger

+0

ありがとうございます、あなたは正しいです、私はそれが三角形のためのものだと思う、頂点ではない - 私の秋、uアドバイスのための多くのおかげで、 – gbk