memo/20120605
created 2012-06-05 modified 2012-06-05
ODE
リンク | 備考 |
---|---|
ODE | Open Dynamics Engine |
ODE-Wiki | |
Slide | 作者による手書きスライド14ページ。 |
リンク | 備考 |
---|---|
ode4j | ODEのJava移植(ラッパーではなく移植) |
ode4j javadoc |
ODEとは、オープンソースの
- 剛体の運動シミュレータエンジンです。
- コリジョン(衝突)検出エンジンです。
ロープや布はアプリで実装すべきという立場らしいです。
コリジョン検出は、「近い2つのオブジェクトをコールバックで知らせてくれるので、利用者がコードで衝突してるか最終判定する」というつくりのようです。
描画エンジンには、外部のものを利用せず、内製の"drawstuff"というものを使っています。そのさらに内部は、OpenGLです。
ユーザアプリ |____ ODE (C風だがコンパイラはC++) |______ drawstuff OpenGL
ode4j
ode4jは、ラッパーではなく移植です。
そのode4j、先週末に最新のODEに対応した版が出たようです。
Eclipse使って、ボールが弾むサンプルを作って見ました。Javaだからか、さすがに200個とかオブジェクト出すと遅くなりますが、
オリジナルのC++版よりもAPIの作りがオブジェクトライクで、わかりやすくできています。
ODEの、Cっぽい(平たい)APIに挫折ぎみだった方がおられたら、ode4jのオブジェクトっぽい(立体的な?)APIでやってみるとよいのではないでしょうか。
なお、ode4jは、内部にLWJGL(Light Weight Java Game Library) を利用しています。その先がOpenGLであるのは、オリジナルのODEと同じ。
ユーザアプリ |____ ode4j (ODEのJava移植) |______ drawstuff (のJava移植) LWJGL OpenGL
リンク | 備考 |
---|---|
LWJGL Light Weight Java Game Library |
プログラミング言語研究者にも比較対象としておすすめ
私は言語としてはCのほうがJavaより好きなのですが、この二者については Java 版の優秀さを褒めない訳にはいきません。
この例は、プログラミング言語文法の研究者にも、貴重なサンプルになると思います。
サンプルを実行しながら、クソッ、Javaのくせに、Javaのくせに、とか思ってました。
ode4jの作者さんの言から自分なりに解釈すると:
例えば、あるAPIのパラメータにオブジェクト(構造体)を渡す場合、それが rvalue でよいところで ODEでは lvalue を使うようになっているが、これは (1)ソースが分かりにくくなる原因となる (2)言語系による最適化の可能性を阻害する わけです。
とまぁこんな感じで、計算機科学屋にも非常に興味深いライブラリなので、ODEとode4j、ぜひ見てみてください。
難点
褒めてばっかりだとアレなんで、悪いところも指摘。ODE も、ode4j も、サンプルプログラムで「モデル」と「ビュー」の分離ができてなくて、初学者にやさしくない。
まぁ、それを差し引いてもよくできていますよ。