私はC++でパーティクルシミュレータを作成しています。フレームレート独立の加速/減速?
私は、時間ステップごとにその位置に速度を加えることによって粒子を動かします。
タイムステップの値は、現在のフレームのパーセンテージです。したがって、フルフレーム時間ステップは1、半フレーム時間ステップは0.5、クォーターフレーム時間ステップは.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の式(velocity * = .95)からどうすればよいでしょうか? – Tyson
@Tyson:それは減速の式ではありません。したがって、それを減速に変換する正しい方法はありません。私は、あなたが見た目と正しい感じの価値を得るまで、数字で遊ぶことをお勧めします。 –
それじゃない?それは時間の経過に伴う速度の変化、すなわち減少を表す。私は数学的な解決策を期待していたと思います。 – Tyson