COLLADAファイルをOpenGLで描く

dae-opengl.png

いくつか不都合、というか謎の点がある。

  • なぜ頂点インデックスデータが位置、法線、テクスチャ座標とinterleavedなのだ?
  • 位置の個数と、法線の個数と、テクスチャの個数が違うとき、どうやって描くのだ??

VBOを使う場合

VBOを位置、法線、テクスチャと別々に分けるしか無い。OpenGLは位置、法線が交互になっているインデックスのVBOはサポートしていないのだ[1]

そして、glVertexAttribPointerするとき

GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 位置のVBOID);
GLES20.glVertexAttribPointer(位置アトリビュート変数の場所,3,GLES20.GL_FLOAT,false,0, 0);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, テクスチャ座標のVBOID);
GLES20.glVertexAttribPointer(テクスチャ座標アトリビュート変数の場所 ,2,GLES20.GL_FLOAT,false,0,0);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 法線のVBOID);
GLES20.glVertexAttribPointer(法線アトリビュート変数の場所 ,3,GLES20.GL_FLOAT,0,0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,vboIds[l]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(GLushort)*numIndices,indices,GL_STATIC_DRAW);
.....
glDrawElements(GL_TRIANGLES,numIndices,GL_UNSIGNED_SHORT,0);
Bibliography

android index-array interleaved opengl vbo

サポートサイト Wikidot.com androidindex-arrayinterleavedopenglvbo