0

メッシュの約半分は三角形を使用しており、残りの半分は三角形ファンを使用しています。これらを頂点バッファオブジェクトにオフロードしたいのですが、これを行う方法がよくわかりません。三角形のファンはすべて異なる数の頂点を持っています...たとえば、1つには5つ、もう1つには7つある場合があります。

VBOは、単純な三角形を使用するとかなり簡単ですが、三角形のファンやさまざまな三角形の種類でVBOを使用する方法がわかりません。インデックスバッファが必要だとはかなり確信していますが、これを行うために何が必要かはよくわかりません。

実行時に各ファンを構成する頂点の数を知っています...それを使用して次のようなものを呼び出すことができると思いますglArrayElement

ここでの助けは大歓迎です!

4

1 に答える 1

2

VBOとインデックスバッファは直交するものです。インデックスバッファをまだ使用していない場合は、一度に1ステップずつ移動する方が賢明かもしれません。

だから...あなたの質問に関して。すべての三角形のファンをvboに配置する場合、それらを描画する必要があるのは、vboを​​セットアップし、ファンの開始のためにその中にインデックスを渡すことだけです。

   glBindBuffer(GL_VERTEX_BUFFER, buffer);
   glVertexPointer(3, GL_FLOAT, 0, NULL); // 3 floats per vertex
   for each i in fans
       glDrawArrays(GL_TRIANGLE_FAN, indef_of_first_vertex_for_fan[i], fan_vertex_count[i])

編集glDrawArrays(GL_TRIANGLES):ファンを正三角形のセットに変換して、すべての三角形に使用する方がおそらく良いと言わざるを得ません。プリミティブごとの呼び出しが効率的になることはめったにありません。

于 2009-10-15T08:41:40.193 に答える