DELPHIER

プログラミングを中心にした思いつきの書きとめ場所です。

2004年03月05日

物理シミュレーションのリンク

Akapa's Space 2
結構ためになるリンク&サンプルがある模様。
ShowckWaveってHavok使えるから結構面白いなぁ・・・。
もう少し環境が簡単に手に入ればいいんですけどねぇ。

2002年01月20日

物理エンジンを作りたい

introduction(イントロダクシュン)



Kano氏、mitsuman氏のの剛体力学デモ、Unreal Tournament 2002を見て、
はなげ氏の物理エンジンメモを見て、物理エンジンを作りたいなぁと思う人は多いはずです。


2D → 3Dに移り変わるとき、物体の位置を直接動かすのではなく、物体の質量や加速度、力によって
物理的に動かしたい・・・と思う人は多いはずです。


僕もワン・オブ・ゼムです。
ということで、いろいろと考えてみました。

first of all(ファストヴォール)



物理エンジンは実際に組んだことはないものの、いろいろと考えたことはありました。
そこで、一番僕が問題と感じたのは「物体のすりぬけ」です。
固定時間進行型ならこの問題はごまかせますが、
実時間進行型だとこの問題はごまかせません。
実行速度の異なるコンピュータで実行結果が異なる、ということがあってはならないのです。


この問題の解決策として、まず最初に考え付くのが「進める時間を微小時間に区切って進める」というものだと思います。
100ms進めるのではなく、1msを100回というふうにやります。これで結構問題は解決できるのですが、


  • 1 msの間にすりぬけが起こる場合に対処できない
  • 実行速度が遅くなる

といった問題が生じます。富豪的プログラミングをやるなら、もちろん実行速度なんか気にしなくていい
(いずれCPUが追いつく)と思いますが、そうもいってられません。

微小時間における衝突を考慮した複数の物体の運動



そこで、考え付いたのが、下記のような手法です。
物体同士の衝突がいつ起こるかを予測し、
「物体の衝突が起こるまで」区切りで時間を進めていきます。
「やっぱり考えるのは紙の上」派なので、ルーズリーフに書いたものを載せておきます(手抜きではありません)。
あとは実装だけなんですが、物理エンジンなんて組んだことがないので、
いろいろと問題にぶちあたるんだろうなぁ・・。


微小時間における衝突を考慮した複数の物体の運動



256857 Since 2005-05-01