2017-07-16 8 views
1

私は、私の3Dエンジンにポリゴンの詳細アルゴリズムのレベルを実装したいと思います。ポリゴンの複数の量のOpenGL実装の詳細レベル

1.実体、例えば:私が得たことは、次の通常

House: 

1. -Entity1: 10000 polygons   viewrange[0,100] 
2. -Entity1: 5000 polygons   viewrange[100,300] 
3. -Entity1: 800 polygons   viewrange[300,1000] 
4. -Entity1: 100 polygons   viewrange[1000,infinity] 

が、私はVBOの各エンティティのを含む新しいVAOを作成するだろうが、そこにありますこれを実装するよりスマートな方法? 1つのVAOしか使用せず、インデックスバッファを変更して詳細レベルを調整できますか?

私は例を作成しました。私は現時点では地形のグリッドに対処し、それらにのLoDを適用する必要があるのです:

例を別のインデックスバッファのために、しかし、どのように私はそれらを交換でしょうか?それは効率的ですか?

OpenGLでLoDを実装する最良の方法は何ですか?複数のVAOが必要ですか、それとも1つのVAOですか?

答えて

1

データと索引付け情報の両方を1つのVAOに格納できます。 1つのバッファにすべてのインデックスをまとめて追加する場合は、drawコマンドで開始インデックスとインデックスの量を指定して、描画するレベルを調整できます。

ご例えば

、あなたは呼び出すことで、インデックス0-5は、レベル1、レベル2 6-29のためにあなたはその後、描くことができますレベル1のためである30個の指標、とインデックスバッファを作成します。

glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); 
呼び出すことにより、

とレベル2:このメソッドは、すべての時間で、ストレージ内のすべてのレベルを有することが必要であることを

glDrawElements(GL_TRIANGLES, 24, GL_UNSIGNED_INT, (void*)(6 * sizeof(GLuint))); 

注意、。これは、あなたの必要に応じて、あなたが望むものではないかもしれません。

+0

いいですね。しかし、最高のLODが約256x256頂点にあるテレイングリッドを使用すると、どのような方法が効率的になりますか?あなたはまだすべてを1つのバッファに保存するか、複数のVAOを使い始めますか? – Luecx

+1

地形が通常のグリッドで構成されている場合は、テッセレーションシェーダを使用して動的なテッセレーションを行います。特に地形の場合は、とにかくカメラに近いほど詳細が必要になります。複数のVAOについて:最初はすべてのデータをロードするか、必要でないときはレベルをメモリにロードして削除しますか? – BDL

+0

私は地形の手続きを生成するかもしれません。しかし、まだそれについてはわかりません。それは大きな違いをもたらすだろうか? – Luecx

関連する問題