2012-03-24 6 views
-1

私はCUDA 4.1を使用して、DirectX 10で作成したパーティクルシステムのアップデートを解析しています。これまでのところ、パーティクルシステムの更新メソッドはforループ内の1行のコードです次のように私は私の粒子クラスからコピーされている構造体を作成した私の.cuクラスでCUDA Particle Update

m_particleList[i].positionY = m_particleList[i].positionY - (m_particleList[i].velocity * frameTime * 0.001f); 

:各粒子が滝をシミュレートするために、y軸を落ちる可能

struct ParticleType 
{ 
    float positionX, positionY, positionZ; 
    float red, green, blue; 
    float velocity; 
    bool active; 
}; 

それから、私も.cuにUpdateParticleメソッドがあります。これは、私の粒子が最初のコード行に基づいて自分自身を更新するために必要な3つの主なパラメータを含んでいます。 :

__global__ void UpdateParticle(float* position, float* velocity, float frameTime) 
{ 

} 

これは私の最初のCUDAプログラムであり、私は次に何をするのか迷っています。私は、単にUpdateParticleメソッドにparticleList行を入れようとしましたが、パーティクルが落ちないようにしました。

私は、パーティクルコードが使用されているクラスで私が必要とするものを私が必要としているものと呼んでいないからです。誰かが私に何を教えてくれたらいいですか?

私がこれを完全に間違っているのであれば、私に知らせてください。このような

答えて

0

何か作業をする必要があります:あなたはあなたの答えにCUDAプログラミングのいくつかの重要なポイントを見逃している

__global__ void UpdateParticle(float* position, float* velocity, float frameTime) 
{ 
    int i = // Code to convert from threadIdx to y coordinate 
    m_particleList[i].positionY = m_particleList[i].positionY - (m_particleList[i].velocity * frameTime * 0.001f); 
} 

for (int frameTime = 0; frameTime < MaxFrameTime; frameTime += frameIncrement) 
{ 
    UpdateParticle<<< XMax, YMax >>>(m_particleList, frameTime); 

    // Code to display particles here ... 
} 
+0

。興味があれば、2つの非常に詳細な回答が提供されています(http://gamedev.stackexchange.com/questions/26119/cuda-4-1-particle-update/26124#26124)。 – kevintodisco