それぞれが任意の頂点数を持つ複数のオブジェクトで満たされた単一のVBO(またはおそらく複数のVBO)について考えてみます。実例として、VBO内に500個の頂点を持つリンゴと650個の頂点を持つオレンジがあるとします。
通常、オレンジを描画したい場合は、glDrawRangeElementsを呼び出して、要素500〜1150を描画したいことを示します。空間の特定の位置にオレンジを描画したい場合は、モデル変換を使用します。
しかし、潜在的に何千ものオブジェクトを描画したい場合はどうなりますか?さらに、VBOに数百のオブジェクトが含まれている場合、一種の「オブジェクトライブラリ」として数千のオブジェクトが含まれているとは限りません。イミディエイトモードを使用して(つまり、オブジェクトごとにglDrawRangeElementsを手動で呼び出す)、描画したいものをGPUに送信する必要はありません。これにより、GPUとの通信に多大なコストのかかるオーバーヘッドが追加されます。
私が探しているのは、OpenGLを使用してある種の配列を一度にアップロードする方法です。この配列には、描画したい各オブジェクトのある種の識別子と、おそらくそれぞれの変換(位置、回転)が含まれます。したがって、任意の場所にさまざまな果物の海を描きたい場合は、インデックスを1回計算してアップロードするだけです。配列は相互に関連させることができます。たとえば、配列は次のようになります。[オブジェクトID 1 ]、[位置1 ]、[回転1 ]...[オブジェクトIDn ]。