私は私が学んだと思いますが、わからない程度だいくつかのことをレイアウトしたいと思います:glEnableClientState(glVertexAttribPointerなど)
- VBOs移動する方法です。それらは
glGenBuffers
とglBufferData
で作成されています。最大限の柔軟性を - 、それは一般的な頂点ではなく
glVertex
、glNormal
などよりも、glVertexAttribPointer
でシェーダに属性を渡すのがベストです。.. glDrawElements
は、効率的に共有のたくさんのジオメトリをレンダリングするために頂点バッファとインデックスバッファを使用することができますランドスケープメッシュなどの頂点。
ここまでのことがすべて正しいと仮定すると、ここに私の質問があります。最新のOpenGLについて読んだチュートリアルのすべては、glEnableClientState
を完全に省略しています。しかし、OpenGLのmanページはglEnableClientState
せず、glDrawElements
は何もしないだろうと言う:
http://www.opengl.org/sdk/docs/man/xhtml/glDrawElements.xml
キー通路がある:「GL_VERTEX_ARRAY
が有効になっていない場合、幾何学的プリミティブが構築されていません」
これは、次の質問に私をリード:チュートリアルの
- なし
glDrawElements
を呼び出す前にglEnableClientState
を使用していません。これは、マニュアルページが間違っているか、古くなったことを意味しますか? GL_VERTEX_ARRAY
は、glVertexPointer
を使用する場合に有効にするものと思われ、同様にGL_NORMAL_ARRAY
とglNormalPointer
を使用するなどのようになります。しかし、私がこれらの関数を使用しておらず、代りにglVertexAttribPointer
で一般的な頂点属性を使用しているのであれば、なぜGL_VERTEX_ARRAY
を有効にする必要がありますか?
"GL 2.1では、汎用属性インデックス0"を使用する必要があります。つまり、GLSLプログラムが属性0を使用していない場合、 "幾何プリミティブは作成されません"というようなものです。ところで、私はMac互換のために2.1を使用しています、そして私のプログラムはglEnableClientStateなしで正常に動作しています。しかし、私はジェネリックアトリビュート0を使用しているという事実を知っています。なぜなら、私のジオメトリがまだレンダリングされている理由がわかっているからです。 – rlkw1024
OpenGLのドキュメントを更新したいと思っています... – Tara