(Mac・iPhone)glArrayElement() と glDrawElements() について
glArrayElement() と glDrawElements() を使った描画方法について解説します(OpenGLは描画方法が多すぎだと思います。こんなにいるのかなぁ?(^_^;))
今回のサンプルコードはこちらにMac版、iPhone版がありますのでダウンロードして下さい。
ここでは以下の4つの頂点のデータが有る場合の使い方を解説します。
// 頂点配列情報 const GLfloat quadVertices[] = { 0.0, 1.0, 0.0, // 1つ目の頂点情報(X、Y、Z座標) 0.0, 0.0, 0.0, // 2つ目の頂点情報(X、Y、Z座標) 1.0, 0.0, 0.0, // 3つ目の頂点情報(X、Y、Z座標) 1.0, 1.0, 0.0, // 4つ目の頂点情報(X、Y、Z座標) }; // カラー配列情報 const GLbyte quadColors[] = { 255, 0, 0, 255, // 1つ目のカラー情報(RGBA) 0, 255, 0, 255, // 2つ目のカラー情報(RGBA) 0, 0, 255, 255, // 3つ目のカラー情報(RGBA) 255, 0, 255, 255, // 4つ目のカラー情報(RGBA) };
こちらの配列データをすぐに使える様に今までと同様に設定処理を記述します。
// 頂点配列のメモリアドレスの指定 glVertexPointer(3, GL_FLOAT, 0, quadVertices); glEnableClientState(GL_VERTEX_ARRAY); // 頂点配列の有効化 // カラー配列のメモリアドレスの指定 glColorPointer(4, GL_UNSIGNED_BYTE, 0, quadColors); glEnableClientState(GL_COLOR_ARRAY); // カラー配列の有効化
glArrayElements()を使った三角形の描画
※iPhone(OpenGL ES)では glBegin() 、 glEnd() コマンドは使用できないため glArrayElements() は使用できません。Macで確認して下さい。
glArrayElements()を使った描画は以下の様に記述します。
glBegin(GL_TRIANGLES); glArrayElement(0); glArrayElement(2); glArrayElement(3); glEnd();
引数はインデックスの指定となります。
上記で設定して頂点配列、 quadVertices のインデックスを指定することにより三角形の3つの頂点を指定しています。ここでは0番、2番、3番の頂点を選択しています。
glDrawElements()を使った三角形の描画
glDrawElements() の場合も基本的に glArrayElements() と同様の指定となります。
しかし、こちらはインデックスを配列で指定し、以下の様に記述します。ここでは3番、0番、1番の頂点を選択しています。
GLuint indices[] = { 3, 0, 1, }; glDrawElements(GL_TRIANGLES, sizeof(indices)/sizeof(indices[0]), GL_UNSIGNED_INT, indices);
iPhone3Dプログラミング講座の一覧はこちら