Kano氏、mitsuman氏のの剛体力学デモ、Unreal Tournament 2002を見て、
はなげ氏の物理エンジンメモを見て、物理エンジンを作りたいなぁと思う人は多いはずです。
2D → 3Dに移り変わるとき、物体の位置を直接動かすのではなく、物体の質量や加速度、力によって
物理的に動かしたい・・・と思う人は多いはずです。
僕もワン・オブ・ゼムです。
ということで、いろいろと考えてみました。
物理エンジンは実際に組んだことはないものの、いろいろと考えたことはありました。
そこで、一番僕が問題と感じたのは「物体のすりぬけ」です。
固定時間進行型ならこの問題はごまかせますが、
実時間進行型だとこの問題はごまかせません。
実行速度の異なるコンピュータで実行結果が異なる、ということがあってはならないのです。
この問題の解決策として、まず最初に考え付くのが「進める時間を微小時間に区切って進める」というものだと思います。
100ms進めるのではなく、1msを100回というふうにやります。これで結構問題は解決できるのですが、
- 1 msの間にすりぬけが起こる場合に対処できない
- 実行速度が遅くなる
といった問題が生じます。富豪的プログラミングをやるなら、もちろん実行速度なんか気にしなくていい
(いずれCPUが追いつく)と思いますが、そうもいってられません。