質問

Iは、位置および種々の特性は、頂点バッファオブジェクトに格納されているパーティクルシステムを有しています。値が連続してCUDAカーネルが更新されます。現在、私はちょうど平らな円としてGL_POINTSを使用してそれらをレンダリングしています。私は何に興味を持ってすることは、これらの粒子は、例えば、3Dアニメーションの鳥のモデルのようなより複雑なものですレンダリングです。私はのための最善のアプローチがどうなるかを把握しようとしています。会話のために鳥のモデルのアニメーションは3つのフレーム(翼の位置やものではありません)。

で構成されて言うことができます

私は、ディスプレイリストを呼び出した後など、マトリックスを表示リストにモデルアップロードを参照し、回転、翻訳中の全粒子の上にループすることができます。それだけGPUに戻って突き出すために行列演算を行うために、GPUからホストにかけ、すべての粒子データを持ち込む必要になるので、これは理想的なアプローチのように見えるしていません(私はCUDAカーネルからの描画関数を呼び出すことができない限り? ?)

私はシェーダについて多くを知らない、彼らは?このようなものを扱うことができるようになる。

この時点で、私は主に追求するためにどのような道上のアドバイスを探していますが、あなたが主題を扱うすべての記事やチュートリアルを知っている場合は、栄光ます。

<時間>

私はC ++でのWindows 7 64ビット上でネイティブのOpenGLで働いています。私はGLUTを使用していない

役に立ちましたか?

解決

EXT_draw_instancedを:

あなたはおそらく使用したいです。私は実際にインスタンス化を使用したことがありませんが、ほとんどの現代のGPU(GF6と私は考えるまで)を使用すると、GPUにモデルや点のリストを供給し、それはすべての点でモデルを描く持つことができます。

私はいくつかの詳細情報をGoogleと私が思い付くものを参照してくださいよ....

さて、これは公式の仕様であり、彼らはそれについてのチュートリアルを持っているように見えます。

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

他のヒント

あなたはそのような何かを創造的な取得する必要があります。もし2枚の成分フロートテクスチャに位置及び回転を計算するためにCUDAを使用し、各頂点と一緒に「インデックス」を焼成し、ジオメトリインスタンスごとに1ずつ増加した場合、あなたはその後、ロードテクスチャ及び頂点シェーダーテクスチャを使用するシェーダを書くことができます2つのテクスチャから当該画素を選択して変換行列を構築するためにルックアップ。あなたは、あなたが構築している変換行列によってメッシュのVertsに変換ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top