2013-02-26 10 views
12

私は現在、OpenGL ES 2.0の分野を初めてお持ちです。バインディング、バッファ、シェーダなどに関して、できる限り理解したいと思います。OpenGL - なぜGL_ELEMENT_ARRAY_BUFFERがインデックスですか?

今のところ、私はちょうどGL_ELEMENT_ARRAY_BUFFERGL_ARRAY_BUFFERと、上記の各プリセットを使用するタイミング。

私の現在の理解は、GL_ELEMENT_ARRAY_BUFFERが特に三角形のインデックス用であり、もう1つは他のもの用であると考えています。

誰かが理由を詳しく教えてもらえますか? GL_ELEMENT_ARRAY_BUFFERはどうやって扱われますか?

答えて

19

GL_ELEMENT_ARRAY_BUFFERは、提示しているバッファが "other"(GL_ARRAY_BUFFER)バッファの各要素のインデックスを含んでいることを示すために使用されます。あなたはインデックスバッファがある場合

ので、頂点を持つ非常に基本的な例のみ(その他のデータ)として、:

{0, 1, 2} {0, 2, 3}

とデータ・バッファが含まれています

{{0, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 1, 0}}

次に、glDrawElementsを呼び出すと、最初の三角形については0、1 &、次に2番目の場合には0,2,3(つまり、基本的には正方形)を選択することがわかります。

多くの頂点がある複雑なモデルの場合は、面の多くが同じ頂点を共有するので(同じデータを「再送」する必要はありません)、これはより便利になります。

注:上記の例では、頂点のみを表示しています(頂点の色、法線、テクスチャ座標など...)できるだけ多くのデータをインターリーブすることができます。

+0

これは私が知るようになった理解です。私が持っている唯一の本当の疑問は、なぜバッファータグの中にELEMENTという言葉がありますか?それは毎回私を捨てます。なぜならそれは単なるARRAYだからです。私はそれを要素配列と呼んでいません。 – TheCodingArt

+1

個人的には、この名前の「要素」という用語は、データバッファに任意のデータが格納できるため、要素参照の配列であることを意味しますが、データ(頂点+標準+色+テクスチャ) 「要素」と呼ばれる。 – goatherder

+0

要素配列には、要素を含む配列の順序が含まれています...それは私が考えることができる唯一の論理的な理由です。 GL_ARRAY_BUFFERに要素が含まれている場合、要素バッファと呼ばれるのはなぜですか?それは私が少し失われたところです。 – TheCodingArt

10

これにはほとんど歴史的な理由があります。 VBOが存在しなかった場合、glVertexPointerなどで指定されたポインタは、どのような種類のOpenGLオブジェクトとも「関連」していませんでした。 VBOが導入されたとき、この振る舞いはVBOのセマンティクスに引き継がれ、インデックスと属性に対して異なるバッファターゲットが必要でした。

アソシエーション機能などの汎用頂点属性が導入されました。

今日、OpenGLの実装では、どのような方法でデータが処理されるのかを知るために、データフローを最適化するためのヒントがあります。しかし、それはプログラマにとって、現在処理されている精神的なリマインダーとしても機能します。

関連する問題