Open GLで三角形を描画するには、glVertexPointer関数、glColorPointer関数、glEnableClientState関数、glDrawArrays関数を使用します。
void glVertexPointer( (GLint)頂点1つあたりの配列の要素数, (GLenum)頂点配列のタイプ, 配列の開始位置, 配列へのポインタ);
最初に頂点の座標を格納した配列をOpen GLに登録します。
void glEnableClientState( GLenum );
頂点を登録したことをOpen GLに通知します。
引数には、登録した配列のタイプを指定します。
void glColorPointer( (GLint)頂点1つあたりの配列の要素数, (GLenum)頂点配列のタイプ, 配列の開始位置, 配列へのポインタ);
頂点の色を登録します。
void glDrawArrays( (GLenum)描画モード, (GLint)描画を開始する配列のインデックス, (GLint) 描画する頂点の数);
描画します。
const GLfloat triangleVerteces[] = {
-0.5f, -0.5f,
0.5f, -0.5f,
0.0f, 0.5f,
};
const GLubyte triangleColors[] = {
255, 0, 0, 255,
255, 0, 0, 255,
255, 0, 0, 255,
};
// 頂点座標を登録
glVertexPointer(2, GL_FLOAT, 0, triangleVerteces);
glEnableClientState(GL_VERTEX_ARRAY);
// 頂点色を登録
glColorPointer(4, GL_UNSIGNED_BYTE, 0, triangleColors);
glEnableClientState(GL_COLOR_ARRAY);
// 描画
glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);
上の例では、赤い三角形が1つ描画されます。
頂点座標の配列(triangleVertices)にX, Y座標のみを与え、Z座標は省きました。このため、glVertexPointer関数の第一引数(頂点1つあたりの配列の要素数)は2(X座標とY座標の2つ)としています。
また、triangleColors配列にはR, G, B, Aの色(Aはアルファ値)を保持しています。
後は、配列の型(GL_FLOAT, GL_UNSIGNED_BYTE等)と配列の開始インデックス(0)、配列アドレスを与えてglVertexPointer,glColorPointerを呼び出します。
glEnableClientState関数には、それぞれ頂点座標を与えるときにはGL_VERTEX_ARRAYを、色配列を与える時はGL_COLOR_ARRAYを与えます。
最後にglDrawArrayで配列に指定した座標と色で描画します。
第1引数の描画モードとは、頂点座標をつなげて描画を行うか(GL_TRIANGLE_STRIP)、ばらばらの三角形として描画を行うか(GL_TRIANGLES)、線分として描画を行う(GL_LINES)かの描画モードを指定します。
例えば、座標が4つ指定してある場合、GL_TRIANGLE_STRIPが指定してあると0番目〜2番目までの頂点を使って三角形を描画し、1番目〜3番目までの頂点を使って三角形を描画するというように、次の頂点と前の三角形とを順次つなげながら描画を行います。
GL_TRIANGLESが指定してあると、0番目〜2番目までの頂点を使って三角形を描画し、3番目〜5番目までの頂点を使って三角形を描画します。
GL_LINESが指定してある場合は、0〜1番目の頂点をつなぐ線分、2〜3番目をつなぐ線分というように、ばらばらの線が描画されます。
0 件のコメント:
コメントを投稿