AndroidでOpenGLの頂点バッファ

モデルを描画する為の座標点列を指定するには、GL10クラスのglVertexPointerメソッドを使う。

 

但し、このメソッドには通常の配列を渡してはいけない。

javaでコーディングされた配列のバイトオーダーはビッグエンディアン。

しかし、glVertexPointerに渡す配列はネイティブのバイトオーダーに合わせなければいけない。

 

そこで、ByteBufferクラスやFloatBufferクラスを使ってネイティブのバイトオーダーで配列を作成する。

    ByteBuffer workBuffer = ByteBuffer.allocateDirect(pcnt * 4);    // 頂点数 x 4バイト
    workBuffer.order( ByteOrder.nativeOrder() );                    // バイトオーダーを変換
    FloatBuffer vertexBuffer = workBuffer.asFloatBuffer();          // FloatBufferへ変換

    vertexBuffer.put( v );                                          // 頂点座標を追加
           :
           :
           :
           :

    vertexBuffer.position( 0 );                                     // ポインタを先頭に戻す(重要!)


    gl.glVertexPointer( 3, GL10.GL_FLOAT, 0, vertexBuffer );


法線やテクスチャ座標やインデックスバッファを使用する場合も、同様にBufferクラスを使用する。