7

(私のラップトップはそのバージョンを超えないため、2.1 を指定しました。3.x 以降ではシェーダーが必須として導入されているので、とにかくこれを行っていただろうか?)。

ウィキペディアに感謝します: http://en.wikipedia.org/wiki/Vertex_Buffer_Object VBO を使用することがどれほど簡単かを理解し始めています (IBO についてはまだ肯定的ではありませんか?)。これまでのところ、それらを使用する主な理由は、データがビデオ メモリに格納されるようになったことにより得られるパフォーマンスの向上であると理解しています。

私が知りたいのは、実際の文脈でそれらをどのように使用することになっているのかということです. たとえば、私が見たものはすべて、1 つの頂点バッファー オブジェクトを設定し、1 つの三角形または 1 つの立方体を描画するなどでした。2 つ以上描画したい場合はどうすればよいですか? 描画するエンティティごとに新しい VBO を設定する必要がありますか? それとも、早い段階でセットアップした静的な VBO に魔法のように追加しますか?

4

2 に答える 2

5

質問はかなり広いので、それは異なります。

各モデル/オブジェクト/エンティティ/メッシュの頂点属性とインデックスに1つのVBOを使用するのは、簡単なアプローチです。すべてのモデルを単一のVBOに格納することでメリットが得られる場合があるため、バッファーを頻繁にバインドする必要はありませんが、これらのモデルがそれほど静的でない場合は、他の問題が発生します。また、オブジェクトごとに複数のVBOを使用することもできます。1つは動的データ用、もう1つは静的データ用、または1つはジオメトリデータ(位置...)用、もう1つはマテリアル関連データ(texCoords ...)用です。

オブジェクトごとに1つのVBOを使用することには、(不)利点がある場合があります。また、単一の巨大なVBOを使用することはあまり良い考えではない場合があります。それは、具体的なアプリケーションと、それらの概念がそれにどれだけうまく適合するかに依存します。しかし、最初は、オブジェクトごとに1つのVBOを使用するという単純なアプローチは、それほど悪い考えではありません。三角形ごとに1つのVBOを使用しないでください;)

于 2011-08-08T15:06:40.753 に答える
2

VBO にデータを追加するだけです。

したがって、たとえば、三角形を 1 つではなく 3 つレンダリングする場合は、必ず 9 つの頂点を に送信してくださいglBufferData。次に、それらすべてをレンダリングするには、次の呼び出しを使用します glDrawArrays(GL_TRIANGLES, 0, 9);。本当に簡単なはずです。

ただし、IBO についてのポイントは、実際には VBO と大差ないということであり、私は実際にそれらを使用することに慣れます。これが実際に VBO を使用する実際の方法です。通常、複数の三角形が同じサーフェスをカバーすることを意図しているため (たとえば、立方体には 12 個の三角形が必要です)、VBO のみを使用すると、頂点データの指定が何度も繰り返されます。インデックス バッファも使用すると、繰り返しが VBO から削除されるため、さらに効率的になります。これは VBO のみから VBO/IBO への移行の簡潔な例を提供し、変更の適切な説明も提供します。

于 2011-08-08T15:04:53.247 に答える