32

頂点配列オブジェクト(VAO)を生成/作成する際のポイントと混同しています。

glGenVertexArrays(GLsizei n, GLuint *arrays);

glBindVertexArray(GLuint);

頂点などのバッファオブジェクトを作成し、VAOを作成する場合と作成しないglVertexAttribPointer場合でそのバッファオブジェクトを記述できるためです。glEnableVertexAttribArray

私の質問は、バッファオブジェクト内のデータを記述するために実際にVAOを作成する必要がない場合、OpenGL SuperBible 5edなどのソースにVBOの作成時にVAOを作成するための呼び出しが含まれるのはなぜですか?それらは私がまだ発見していないより高度なトピックにのみ使用されていますか、私は完全に混乱していますか?

また、VBOのウィキペディアのエントリを読んでいるときにこの質問に最初に遭遇しました。サンプルコードにはへの呼び出しは含まれていませんがglGenVertexArrays()、データはで記述されていますglVertexAttribPointer()Wiki VBOエントリ-VAO がどのような理由で作成される例?

4

3 に答える 3

17

3つのVBO(シェーディング用の異なるデータ、おそらく位置、法線、およびいくつかの派手な効果パラメータ)を必要とするオブジェクトを構築しているとします。このオブジェクトを描画するたびに、これらすべてのVBOをバインドし、追加のパラメーターを設定する必要があります。VAOを使用する場合は、1回の呼び出し(頂点配列のバインド)を使用するだけで済みます。これにより、特定のオブジェクトの環境全体がセットアップされます。

于 2011-05-13T05:37:16.043 に答える
7

答えは想像したほど難しくありません。面白い比喩だと思ってください。VertexArrayObjectは上司であり、複数のスタッフを管理していますVetexBufferObjects

于 2013-08-15T05:45:31.647 に答える