我正在用C++寫一個粒子模擬器。幀率獨立加速/減速?
我通過在每個時間步將它們的速度添加到它們的位置來移動粒子。
時間步的值是當前幀的百分比。所以全幀時間步長是1,半幀時間步長是0.5,季度幀時間步長是0.25,等等。總的模擬步驟是frameCount/timeStep ...所以時間步長越小,總數越多模擬的步驟。
保持跨時間步驟的基本動作同樣非常簡單。該公式是:
position = position + velocity * timeStep; //10 full frames later, end position is always the same
但是,一旦我嘗試改變隨時間變化的速度過於它得到了我目前的數學概念太複雜了。例如,如果我這樣做:
velocity = velocity * .95f;
position = position + velocity * timeStep; //10 full frames later, end position dependent on time step
跨不同時間步驟的結果不再相同。我知道這是因爲如果我通過減少時間步長來增加計算的總步數,我也會減少更多次的速度,這將對粒子的最終位置產生很大的影響。
如何在一段時間內以不同時間步長獲得相同結果的方式修改速度?
嗯,讓我怎麼鍛鍊你的函數的加速度值應該是什麼,從我最初的(de)cceleration(速度* = 0.95)的公式? – Tyson
@Tyson:這不是一個減速公式。所以沒有正確的方法將其轉化爲減速。我會建議玩數字,直到你看到一個看起來和感覺正確的值。 –
不是嗎?它描述了速度隨時間的變化,即減少。我想我希望得到一個數學解決方案,而不是'一直到它有效'的解決方案。 – Tyson