2012-03-24 127 views
-1

我正在使用CUDA 4.1來解析我用DirectX 10製作的粒子系統的更新。到目前爲止,我的粒子系統的更新方法是for循環內的1行代碼,使得每個粒子落下y軸來模擬瀑布:CUDA粒子更新

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

以我.CU I類已經創建其從我的粒子類複製並是一個結構如下:

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程序,我不知道下一步該做什麼。我試圖簡單地將particleList行放入UpdateParticle方法中,但粒子不會像他們應該那樣掉下來。

我相信這是因爲我沒有調用我需要在粒子秋季代碼使用的類中需要的東西。有人可以告訴我我錯過了什麼,它應該如何運作?

如果我一般這樣做完全錯誤,請通知我。

回答

0

像這樣的東西應該工作:

__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

你已經錯過了CUDA編程的幾個關鍵點在你的答案。如果您有興趣,可以提供兩個非常深入的答案[這裏](http://gamedev.stackexchange.com/questions/26119/cuda-4-1-particle-update/26124#26124)。 – kevintodisco 2012-03-25 07:56:38