2010-12-03 12 views
0

私はglDrawElementsおよび頂点、標準、およびtexcoordinateインデックスに関する質問があります。頂点、通常、およびtexcoordinateインデックス

私は幾何学的な頂点、頂点の法線とテクスチャの頂点を持ち、それぞれに独自のインデックスがあります。

これらの指標のうち、どれを使用できますか?

私はこのコードを持っている場合:

glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, 
     (const GLvoid*) &teapotVertices[0]); 
glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, 
     (const GLvoid*) &teapotNormals[0]); 
glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, 
     (const GLvoid*) &teapotTexCoords[0]); 

glEnableVertexAttribArray(vertexHandle); 
glEnableVertexAttribArray(normalHandle); 
glEnableVertexAttribArray(textureCoordHandle); 

glBindTexture(GL_TEXTURE_2D, thisTexture->mTextureID); 
glUniformMatrix4fv(mvpMatrixHandle, 1, GL_FALSE, 
     (GLfloat*)&modelViewProjection.data[0]); 
glDrawElements(GL_TRIANGLES, NUM_TEAPOT_OBJECT_INDEX, GL_UNSIGNED_SHORT, 
     (const GLvoid*) &teapotIndices[0]); 

をteapotIndicesを保持する必要がありますか?

ありがとうございました。

答えて

3

あなたの質問が分かりません。

TeapotIndicesは、頂点をレンダリングする順序を示すインデックスのコレクションでなければなりません。例えば

、あなたは3つの頂点(三角形)から作られたオブジェクトを持っているとしましょう:

0.0, 0.0, 0.0 //index 0, lower left corner 
0.5, 0.5, 0.0 //index 1, top corner 
1.0, 0.0, 0.0 //index 2, lower right corner 

あなたはインデックスコレクション/配列にあなたがそれらをレンダリングする順序を指定します。あなたのようにあなたのインデックスを指定します、あなたはあなたの三角形が反時計回りにレンダリングされるようにしたいと言う

0,2,1 
その後、最初の左下隅を描画します

glDrawElements、その後、右下隅、そして最後上隅

のもちろん、これは1つの三角形が関わっているときにはあまり意味がありませんが、最初の三角形を下に向ける別の三角形を追加したいとします。これは最初の三角形の底に触れることを意味します。代わりに、再びその1のための3つの頂点を指定する、あなただけのあなたの頂点に異なるものを追加する必要があります。

0.0, 0.0, 0.0 //index 0, lower left corner for first triangle 
0.5, 0.5, 0.0 //index 1, top corner for first triangle 
1.0, 0.0, 0.0 //index 2, lower right corner for first triangle 
0.5, -0.5, 0.0 //new: index 3, bottom corner of a "mirrored" triangle 

そして、あなたはこのようなあなたのインデックスを持っているでしょう:

0,2,1, 2,0,3 
//  ^^^^^ second triangle vertex indices 

を参照してください、我々 1つの新しい頂点だけを持つ2番目の三角形全体を追加し、新しい三角形の2つの古い頂点を再利用しました。

関連する問題