1

大量のパーティクルをレンダリングする必要があります。これらのパーティクルは、テクスチャのない単純な四角形(実際には正方形)です。ああ、そして彼らは粒子なので、彼らはいつも動いています。

私は2つのオプションを検討しましたが、私はOpenGLの専門家ではないため、何が最善かわかりません。

  1. VBOを使用してそれらすべてをレンダリングします。
    長所:即時モードよりも高速です。
    短所:(VBOについてはよくわかりませんが)収集したものから、クワッドの座標をRAMのバッファに保存する必要があります...そして、これらの座標はすべてCPUによって計算される必要があります。したがって、粒子P1(x、y)の場合、他の4つの座標(P2(x-1、y-1)、P3(x-1、y + 1)、P4(x + 1、y + 1))を計算する必要があります。 、P5(x + 1、y-1))-これはCPUにとって大変な作業です。

  2. ディスプレイリストを使用する:最初に、単一の正方形のクワッドの小さなディスプレイリストを作成します。次に、各パーティクルをレンダリングするには、いくつかの操作を行いますpushMatrix, glTranslate, callList, popMatrix
    長所:4つの座標を手動で計算する必要はありません-glTranlateがそれを行います。
    おそらく、ディスプレイリストはVBOよりも高速です。
    短所:クワッドが1つしかない場合、VBOよりも高速ですか?

注意:私はJavaからOpenGLのものを呼び出しているので、Java配列をGPU配列に変換するスムーズな方法はありません(転送前にすべてを中間のFloatBuffersに格納する必要があります)。

4

2 に答える 2

1

ディスプレイリストは静的ジオメトリ用です。単一のクワッドを1つだけレンダリングしてから、変換、すすぎ、繰り返しを変更することは、ひどく非効率的です。

VBOの更新は優れていますが、それでも最適ではありません。

インスタンス化されたレンダリングを調べる必要があります。チュートリアルは次のとおりです。

http://ogldev.atspace.co.uk/www/tutorial33/tutorial33.html

ジオメトリシェーダーを使用する単純なクワッドの場合、単純なGL_POINTSを2つのGL_TRIANGLESに変換すると、同様にトリックが実行されます。

于 2013-02-21T09:38:36.810 に答える
0

粒子シミュレーションを行うために、あなたが探しているのは変換フィードバックだと思います。これは、それを行う方法に関するいくつかのコードを含む素晴らしいデモンストレーションですhttp://prideout.net/blog/?tag=opengl-transform-feedback

于 2013-02-21T07:59:46.500 に答える