現在地 >> メニュー >> 基本編09 >> 頂点配列 >> glDrawElementsによる描画


glDrawElements()関数


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でも十分だと思う。

glMultiDrawElements

複数回の「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]);
	}
}

サンプルコード

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます