2011-07-28 21 views
8

iphone用のopengl es 2.0では、地形に頂点バッファオブジェクトを使用する方法を理解できません。それは静的なデータなので、私はVBOを使ってスピードを上げることを望んでいます。通常のOpenGLでは、シェーダと一緒にディスプレイリストを使用しても問題はありません。しかし、OpenGL 2.0では、頂点データを属性としてシェーダに送信しなければならず、これがVBOとどのように機能するかはわかりません。頂点バッファは、呼び出されたときに頂点データをバインドする属性をどのように知ることができますか?これはopengl 2.0でも可能ですか?そうでない場合は、静的な地形のレンダリングを最適化できる他の方法はありますか?OpenGL ES 2.0と頂点バッファオブジェクト(VBO)

答えて

12

確かに、これはあなたの属性は場所を持って、実際にはかなり簡単で、頂点データは次のように、無地の頂点配列のためglVertexAttribPointerが供給される。

VBOsについては
float *vertices = ...; 
int loc = glGetAttribLocation(program, "position"); 
glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, 0, vertices); 

が、それは同じだが、あなたは持っていますバッファを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で実行されます。お役に立てれば!

+0

はい、これは私が必要とするものです。私は明日それを試してみるよ。ありがとう! – Nitrex88

+0

2番目の例で 'vertices'と何をするべきかを知ることができたら助けになるでしょう。アイデア? –

+1

@tephane頂点は、glBufferDataを使用してVBOにアップロードする必要があります。 –