2011-02-01 4 views
3

次のパーティクルシステムに変更を加えようとしています。 http://create.msdn.com/en-US/education/catalog/sample/particle_3dGPU(XNA)の代わりにCPUを使用してパーティクルを描画する

は私がスペースを押したときに、粒子がまだ動いている、私はスペースキーを押したときに、すべての粒子がその位置と速度が0しかし

for (int i = 0; i < particles.GetLength(0); i++) 
{ 
    particles[i].Position = Vector3.Zero;  
    particles[i].Velocity = Vector3.Zero; 
} 

に設定されていることの機能は、持っています。私がFireParticleSystem.csに行くと、私はsettings.Gravityを0にすることができ、パーティクルは移動を停止しますが、パーティクルは(0,0,0)にシフトされていません。

私が理解しているように、問題はGPUがすべてのパーティクルの位置を処理していることにあります。パーティクルの初期位置、初期速度、したがって、私ができることは粒子の初期位置と速度を変えることだけですが、GPUがすべてを処理しているので、その場で行うことはできません。

私はCPUに粒子の位置を個別に計算させたいと思っています。これは後で、粒子を押しつぶすために何らかの風を実装するためです。 GPUの引き継ぎをどうやって止めるのですか?私はそれがVertexBuffersとdraw関数と関係があると思っていますが、動作させるためにそれを変更する方法はわかりません。

+0

gamedev.stackexchange.comもお試しください。 – Nate

答えて

0

これは非常に簡単です。シェーダにオフロードするのではなく、CPU上で位置/速度計算を行うだけです。私はもちろん、あなたのコードを見ることができないので、私は実際にはもっと具体的なガイダンスを提供することはできません...しかし、FarSeerのような物理エンジンでパーティクルをアニメーション化するか、それはCPU上で起こります。

1

ダウンロードしたサンプルは、あなたが聞いたことをすることができません。パーティクルシステムはGPUによって完全に管理されているため、位置や速度の変更は実際のリアルタイムパーティクル値ではなく、開始値を変更するだけです。 CPUによって変更可能なパーティクルシステムを作成するには、パーティクルエンジンクラスを作成してそれを自分で行う必要があります。そこには、これを行う他の多くのサンプルがあります。

Riemers XNAチュートリアルは非常に便利です。このリンクを試してください: http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Particle_engine.php

2Dパーティクルシステムの作成方法を教えてください。これは簡単に3Dに変換できます。 それとも、あなただけの既存のエンジンをダウンロードしたい場合は、マーキュリーの粒子エンジンを試してみてください。 http://mpe.codeplex.com/

0

私はこのためDPSF (Dynamic Particle System Framework)をお勧めします。 CPU上での計算は完全にカスタマイズ可能で非常に柔軟性があり、役立つドキュメントやチュートリアルがあり、使用しているParticle3DサンプルからFireParticleSystemの完全なソースコードを提供することもできます。パーティクルシステムをゲームに組み込んで、ほんの数分で達成できるはずです。

関連する問題