大昔に作った
車輪シミュレーターを、ブラウザアプリにして、更に、出来る技も増やしたいと思い始めました。3Dの表示と物理シミュレーションには、
three.jsが使い慣れてて良いのですが、現在の three.js には、体操の技のシミュレーションを行う上で、捻り運動をシミュレート出来ないと言う大きな問題があります。
以下、詳しい説明。
three.js は、物理シミュレーションを行うライブラリーに、
ammo.jsを使っています。この ammo.js は、C++で書かれた
Bullet physics engineを、機械的にJavascriptに翻訳したライブラリーです。大元の Bullet physics engine は、バージョン2.83以降(最新版は2.88)になって、
BT_ENABLE_GYROPSCOPIC_FORCEというフラグが導入され、捻り運動のシミュレーションが行えるようになりました。ところが、ammo.js は、バージョン2.83 が出て何年も経つのに、いつまでも、捻りに対応してないバージョン2.82 を元にし続けています。three.jsの最新版(r108)に入っている ammo.js も同様です。
昔作った車輪シミュレーターは、蹴上り、翻転、車輪、宙返りなど、捻りに関係ない技しかシミュレート出来なかったので、似たものを作るなら上の問題は気にしなくて良いのですが、どうせ作り直すなら捻り技も出来るようにしたいので、上の問題は深刻です。
自分で ammo.js をバージョン 2.83以降に対応させようとするのは、凄く大変そうで諦めました。そこで、誰かがやってくれてないか、ammo.js の
フォーク 264件全部調べてみました。その結果、候補になりそうなのが4件だけ見つかりました:
捻れたのは2件。最新の 2.88ベースの方がいいので、最後のを使おうかな、と思っています。調べた時の最新のコミットは1312393(2019/5/9)でした。
実験コードを
ここに置いておきます。