最終更新: mikk_ni3_92 2010年02月01日(月) 18:37:37履歴
現在地 >> メニュー >> 基本編09 >> 頂点配列 >> glDrawElementsによる描画
glDrawElements()関数はインデックスで呼び出す。
例えば以下のような頂点を考える
これを実現するのは、glDrawElements()関数である。
引数は
【例】
※メモ
例では、インデックスの型にGLuintを用いたが、GLubyteでも十分だと思う。
glDrawElements()関数はインデックスで呼び出す。
例えば以下のような頂点を考える
//頂点の配列データ float points[] ={ 0,0,0, //v0 1,0,0, //v1 1,1,0, //v2 0,1,0, //v3 0,0,-1, //v4 1,0,-1, //v5 1,1,-1, //v6 0,1,-1, //v7 }; //頂点番号を知らせる GLuint index[]={ 0,1,2,3, 1,5,6,2, 5,4,7,6, 4,0,3,7, 4,5,1,0, 3,2,6,7 }; //インデックスの合計は24あらかじめ、メモリ上に8頂点を格納し、頂点番号だけを知らせて描画すれば効率がよい。
これを実現するのは、glDrawElements()関数である。
引数は
glDrawElements(プリミティブの種類、インデックスの数、インデックスの型、データ元)である。
【例】
glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, points); glDrawElements(GL_QUADS, 24, GL_UNSIGNED_INT, index); glDisableClientState(GL_VERTEX_ARRAY);
※メモ
例では、インデックスの型にGLuintを用いたが、GLubyteでも十分だと思う。
複数回の「glDrawElements」をまとめた「glMultiDrawElements」もある。
これは、次のような感じ。
これは、次のような感じ。
GLvoid glMultiDrawElements(GLenum mode, GLsizei* count, GLenum type,GLvoid** indices, GLsizei primcount) { for(GLint i = 0; i < primcount; ++i) { if(count[i]) > 0) glDrawElements(mode, count[i], type, indices[i]); } }