見た目はさほど変わってないけど、
以前のしょっぱい流体シミュレータからちょこっとだけ進化。
以前は粒子数を増やしても、粒子(球)が重なっていき
どんどん沈んでいっちゃってた。
粒子を3倍に増やしても、水面の高さは変わらず、っていう具合に。
今回は粒子の跳ね返り後の速度を、粒子の接近具合に依存させてみました。
調べてみると、これが一般的な手法のようでした。
すると水面が沈むことなく、粒子を増やせばどんどん高くなるようになりました。
ただ粒子の重なりは完全に防げず、下にいくにつれて重なりが激しくなっており、
図らずも色の濃さが圧力を表してる感じになってます。
粒子数は800で、リアルタイム計算でそこそこヌルヌル動きます。
あとでっかい球をドラッグできるようにしました。
(一般的な物理エンジンでよくあるあんな感じ)
ここまで計算を全て3次元ベクトルで行ってきたので、
z方向に初期速度を与えれば即3Dになる。はず。
今度はこれをC++に移植してOpenGLで3Dアニメーションにしてみたい。
Java3Dは一回挫折したけど、Java3Dでもやれたらやってみたい。
以前のしょっぱい流体シミュレータからちょこっとだけ進化。
以前は粒子数を増やしても、粒子(球)が重なっていき
どんどん沈んでいっちゃってた。
粒子を3倍に増やしても、水面の高さは変わらず、っていう具合に。
今回は粒子の跳ね返り後の速度を、粒子の接近具合に依存させてみました。
調べてみると、これが一般的な手法のようでした。
すると水面が沈むことなく、粒子を増やせばどんどん高くなるようになりました。
ただ粒子の重なりは完全に防げず、下にいくにつれて重なりが激しくなっており、
図らずも色の濃さが圧力を表してる感じになってます。
粒子数は800で、リアルタイム計算でそこそこヌルヌル動きます。
あとでっかい球をドラッグできるようにしました。
(一般的な物理エンジンでよくあるあんな感じ)
ここまで計算を全て3次元ベクトルで行ってきたので、
z方向に初期速度を与えれば即3Dになる。はず。
今度はこれをC++に移植してOpenGLで3Dアニメーションにしてみたい。
Java3Dは一回挫折したけど、Java3Dでもやれたらやってみたい。