7

OpenGL を使用して多くの球体 (~100k) を描画したいと考えています。これまでのところ、私は次のようなことをしています

for (int i=0; i<pnum; i++){
     glPushMatrix();
     glTranslatef(bpos[i].x, bpos[i].y, bpos[i].z);
     glCallList(DListSPHERE);
     glPopMatrix();
}

適切な球体を使用する前に、使用しGL_POINTSました。glDrawArraysこれにより、非常に効率的なすべてのポイントを含む配列で呼び出すことができました。多くの同一のオブジェクトを描画する上記のコードよりも良い方法はありますか?

4

3 に答える 3

8

インスタンス化に関するこのページをご覧ください多くの参照が含まれています。

ウィキペディアのジオメトリのインスタンス化も参照してください。

于 2010-01-03T15:27:57.867 に答える
3

約100kの球を描画する場合は、ポリゴンメッシュを使用して球を近似するのではなく、レイキャストを検討することをお勧めします。 Siggらによる論文GPUベースの二次表面のレイキャスティング。(2006)およびGumhold (2003)による深さ補正付きのスプラッティング照明楕円体は、これを行う方法を示しています。これを行うと、高速ポイントスプライトコードの多くを再利用できます。

于 2010-01-03T18:03:01.563 に答える
2

ポイント スプライトとフラグメント シェーダーを使用して、実際の球体ジオメトリなしで、レンダリングされた球体の効果を複製できます。ただし、最初にインスタンス化を試みます。

于 2010-01-03T21:28:06.983 に答える