3

位置とさまざまなプロパティが頂点バッファオブジェクトに格納されているパーティクルシステムがあります。値はCUDAカーネルによって継続的に更新されます。現在、GL_POINTSをフラットサークルとして使用してレンダリングしています。私が興味を持っているのは、これらのパーティクルをレンダリングすることです。たとえば、3Dアニメーションの鳥モデルなどです。私は最善のアプローチが何であるかを理解しようとしています。会話のために、鳥のモデルのアニメーションが3つのフレーム(翼の位置など)で構成されているとしましょう。

モデルをディスプレイリストにロードし、マトリックスの変換、回転などですべてのパーティクルをループしてから、ディスプレイリストを呼び出すことがわかります。これは理想的なアプローチとは思えません。GPUに戻すために行列操作を行うためだけに、すべてのパーティクルデータをgpuからホストに取り込む必要があるためです(cudaカーネルから描画関数を呼び出せない限り?? ?)

シェーダーについてはよくわかりませんが、このようなものを処理できるでしょうか。

この時点で、私は主にどの道を追求するかについてのアドバイスを探していますが、主題を扱っている記事やチュートリアルを知っているなら、称賛に値します。


私はWindows764ビットとC++でネイティブにOpenGLを使用しています。GLUTを使用していません

4

2 に答える 2

4

おそらく、EXT_draw_instancedを使用することをお勧めします。私は実際にインスタンス化を使用したことはありませんが、ほとんどの最新のGPUS(GF6以降)では、GPUにモデルとポイントのリストをフィードし、すべてのポイントでモデルを描画させることができます。

私はもう少し情報をグーグルして、私が思いついたものを見るでしょう....

これは公式の仕様であり、チュートリアルがあるようです。

http://www.opengl.org/registry/specs/ARB/draw_instanced.txt

于 2010-02-18T18:09:43.617 に答える
0

あなたはそのようなことをするために創造的になる必要があるでしょう。CUDAを使用して位置と回転を23コンポーネントのフロートテクスチャに計算し、各頂点とともに「インデックス」を起動し、ジオメトリインスタンスごとに1ずつインクリメントする場合、テクスチャをロードしてから頂点シェーダーテクスチャを使用するシェーダーを作成できます。 2つのテクスチャから関連するピクセルを選択し、変換マトリックスを作成するためのルックアップ。次に、作成した変換行列によってメッシュの頂点を変換します。

于 2010-02-18T18:26:52.597 に答える