9

OpenGL 3.x自体の最新のリファレンスはほとんどないようですが、OpenGLの実際の低レベルの操作は比較的簡単です。しかし、ダイナミックな世界をレンダリングするためにVBOを操作する方法を概念化しようとしても、深刻な問題を抱えています。

明らかに、古い即時モードの方法は適用できませんが、そこからどこに行きますか?ある種のシーン構造を記述し、それを頂点のセットに変換してVBOにストリーミングしますか?翻訳データをどのように保存しますか?もしそうなら、それはコード的にどのように見えるでしょうか?

基本的に、続行する方法が本当にわかりません。

4

3 に答える 3

9

ワールド全体が真に動的である場合は、GL_STREAM_DRAW_ARB使用フラグを使用して、各フレームのデータをリセットできます。わざわざ操作する必要はありません。できるだけ効率的にストリーミングするようにしてください。

ただし、互いに相対的に移動する複数の剛体オブジェクトで構成されるシーンがあると仮定します。この場合、オブジェクトごとに 1 つの VBO を使用し、GL_STATIC_DRAW_ARB使用フラグを指定します。次に、オブジェクトのインスタンスごとにモデルビュー変換を設定し、インスタンスごとに 1 つの描画呼び出しを使用してそれらをレンダリングできます。

(PC での) 経験則では、CPU の MHz ごとに 1 つ以上のドロー コールを発行しないことです。これは大まかな見積もりですが、いくつかの真実があります。この制限を下回っていれば、複数の独立したオブジェクトを単一の VBO やその他のパフォーマンス トリックに入れることを心配する必要はありません。

于 2009-11-13T15:27:03.860 に答える
5

VBO を使用しても、単一の描画呼び出しだけでシーン全体をレンダリングする必要があるわけではありません。複数の描画呼び出しを発行し、途中でさまざまな変換マトリックスを設定することもできます。

たとえば、シーングラフを使用している場合、シーングラフ内の各モデルは 1 つの描画呼び出しに対応できます。このような場合、VBO を使用する最も簡単な方法は、モデルごとに個別の VBO を作成することです。

最適化として、複数のモデルを単一の VBO に結合し、描画呼び出しを行うときにゼロ以外のオフセットを渡すことができる場合があります。これにより、VBO から正しいモデルが抽出されます。複数の描画呼び出しを 1 つの描画呼び出しに結合することも望ましいですが、独立した変換が必要な場合、それは不可能です。(実際に、インスタンス化または頂点ブレンディングを使用すると特定の状況で可能ですが、最初に基本を理解することをお勧めします。)

于 2009-11-13T14:43:53.440 に答える