2

一度に何千ものポリゴンが表示され、ユーザーの視点が絶えず変化する大きなランドスケープをレンダリングしたい場合、VAOまたはVBOを使用するのは実用的ですか?

つまり、プレーヤーの位置またはカメラの回転が変更されるたびに、適切なFPSカウントを維持するために、表示されなくなった頂点またはシーンを適切にカリングするために、頂点データを再計算する必要があります。ただし、これを行うと、すべてのバッファーを絶えず再パックしているため、FPSカウントが低下します。

それで、即時モードよりもこれら2つの方法を使用することはまだ有益ですか?

イミディエイトモードでは、フレームごとにすべての頂点をわずかに異なる方法で再計算しているので、私の推測はイエスです。悲しいことに、私はこれについて多くのバックグラウンドを持っていません、そしてインターネットがこのトピックに関して混合されたメッセージを持っているので私は混乱しています。

4

2 に答える 2

6

答えは「はい」です。VBOは大規模なポリゴンレンダリングタスクに実用的です。イミディエイトモードは固定機能パイプラインの一部であり、FFPは非推奨であるため、使用しないでください。

ただし、フレームごとにランドスケープを再計算して、バッファに再度保存しないでください。このような状況を処理する方法はいくつかありますが、リソースの競合が発生する可能性があるため、フレームごとにVBOを更新することは避けてください。

  • ある種のLODを使用します。これを行うにはさまざまな方法があります(これがどのように機能するかについての画像を取得するには、ここを参照してくださいが、必ずしもそうする必要はありません)。一般に、シーンが視聴者との距離が遠い場合は、ポリゴンを減らします。2D地形(張り出した地形がない)がある場合、それは非常に簡単です。地形がより複雑な場合、これを処理するのは困難ですが、それでも可能です。
  • しばらくすると表示される可能性のあるすべてのバッファをRAMに保持します(ただし、表示する必要はありません)。これは、LODアプローチと比較して非常にメモリを消費します。地形セグメントが視野範囲外にある場合は、それを削除します。
  • データをストリーミングし、ダブルバッファリングされたVBOを使用します(これは、1つのセグメントに対して2つのVBOがあり、1つはレンダリングされ、もう1つは書き込まれます)
于 2013-01-29T01:06:05.247 に答える
5

つまり、プレーヤーの位置またはカメラの回転が変更されるたびに、頂点データを再計算する必要があります

いいえ、しません。通常のテレインレンダラーでは、データはタイルに分割されます。そして通常、それらのタイルは、詳細レベルを実装するために、何度も何度も細分化されます。タイルを際立たせるのは、それらが参照する頂点です。したがって、地形データ用の1つの大きな頂点配列と、タイル用の多数のインデックス配列があります。適切なインデックス配列を使用してglDrawElementsを呼び出すことにより、どのタイルをどの詳細レベルで描画するかを選択できます。

于 2013-01-29T01:07:23.713 に答える