強火で進め

このブログではプログラム関連の記事を中心に書いてます。

(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プログラミング講座の一覧はこちら