8

opengl es 2.0 for iphoneで、自分の地形に頂点バッファオブジェクトを使用する方法がわかりません。静的データなので、VBOを使ってスピードアップしたいと思っています。通常のOpenGLでは、シェーダーと一緒にディスプレイリストを問題なく使用しています。ただし、opengl es 2.0では、頂点データを属性としてシェーダーに送信する必要があり、これがVBOでどのように機能するかわかりません。頂点バッファは、呼び出されたときに頂点データをバインドする必要がある属性をどのように知ることができますか?これはopengles2.0でも可能ですか?そうでない場合、静的な地形のレンダリングを最適化する他の方法はありますか?

4

1 に答える 1

12

確かに、これは実際には非常に単純であり、属性には場所があり、頂点データはglVertexAttribPointer()次のようにプレーンな頂点配列に供給されます。

float *vertices = ...;
int loc = glGetAttribLocation(program, "position");
glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, 0, vertices);

VBOの場合も同じですが、バッファをGL_ARRAY_BUFFERターゲットにバインドする必要があり、の最後のパラメータはglVertexAttribPointer()バッファメモリストレージへのオフセットになります。ポインタ値自体はオフセットとして解釈されます。

glBindBuffer(GL_ARRAY_BUFFER, buffer);
int loc = glGetAttribLocation(program, "position");
glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, 0, 0);

この場合、頂点データがバッファの開始時にアップロードされると仮定すると、オフセットは0です。オフセットはバイト単位のメジャーです。

次に、glDrawArrays()/を使用して描画が実行されglDrawElements()ます。お役に立てれば!

于 2011-07-29T00:57:52.610 に答える