6

私がやろうとしているのは、基本的に、異なる移動と回転で複数回レンダリングされる 1 つのモデルを持つことです。

Array Buffersだから、私はand Array Element Buffers( ) の使い方を知っていますVertex Buffer Objects。私の質問は. VBOモデルを別の変換と回転で複数回レンダリングしたい場合に最適なアプローチにモデルをロードしたときです。

これがどのように行われるかについて、私は2つの理論を持っています。(私は何が最善のアプローチであるかを尋ねていますが)。

  1. モデルを 1 つにロードし、レンダリングしたいモデルごとにVBO呼び出しを続け、平行移動と回転を適用します。glDrawArrays

  2. VBOモデルを 1 つに複数回ロードします。同じモデルが複数回保存されるため、大量のメモリが使用されます。

追加: 1 つの方法を実行する場合、レンダリングに必要なモデルの量を最小限に抑える Quadtrees や Frustum を使用できます。

高い FPS が必要であり、可能な限り多くのメモリを節約できる場合、これらの方法のどれが最適でしょうか。それとも、さらに優れた別のアプローチがありますか?

明確にするために、使用してレンダリングする方法VBO'sや一般的にレンダリングする方法を尋ねているのではなく、同じモデルを複数回レンダリングする場合の最良のアプローチは何かを尋ねています。

テストモデル

これは、テスト モデルのイメージです。

デモモデル

編集

現在、OpenGL バージョン 4.2.0 を使用しており、Windows デスクトップ コンピューターで使用しています。

4

1 に答える 1

4

ドロー コールとユニフォームの転送を最小限に抑えるには、glDrawArrayInstanced()を使用できます。この方法では、元のオブジェクトのインスタンスを 1 回のドロー コールで必要な数だけ送信できます。UBO (ユニフォーム バッファ オブジェクト) にパックできる各インスタンスの行列と、gl_InstanceIDを使用してインスタンスごとに頂点シェーダーにアクセスする

于 2013-08-26T16:57:37.247 に答える