これから再びちょこちょこと書き始めます。
開催が2週間後に迫った、信州大学で行われるコマ大戦。
信大から出場する選手たちのコマのシミュレーションを任されることになったけれど、1から物理エンジンを書いてはいられない。
与えられた使命は、幾つかのコマ形状を作ったり、CADで作ったモデルを読み込んで、それを回転させた際の挙動や強さをシミュレートすること。
とりあえず、JavaやCでさくっと作るために、フリーの物理エンジンを漁ることに。使ってみた物理エンジンは以下の通り。
【Open Dynamics Engine】
C++で簡単に起動できました。
そして「demo_gyroscopic」と、始めからコマっぽいデモがありました。
これでいける!と、始めのうちは安心しきっていたら、落とし穴が。
用意されている物体形状がやたら少なく、Cone(円錐)も無かった。
円錐が無いと、こまっぽい形が作れない。CADで作ったモデルの読み込みも悪戦苦闘した結果、挫折。
気を取り直して次に行くことに。
【jMonkeyEngine】
次はJava。今後はゲームエンジンを試してみました。
物理計算の部分は、bulletのJava版、jbulletを使っているようです。(jbullet単体で使おうとするも、使い方わからなかった。)
こちらはデモでコマっぽいものはありませんでしたが、普段Javaで書いているおかげが、割とわかりやすく、
様々な形状を標準でサポートしていたので、円錐やカプセル、円筒を組み合わせて角速度を与えて回転させることに成功。
今度こそいける!と思ったら、ファイル入力の部分で問題が。
jMonkeyEngineでサポートしている3Dモデルのフォーマットは「Ogre Mesh XML」というもので(Blenderなんかで作れるらしい)、
学生が講義で使っているCADソフトでは出力不可能でした。
一応obj形式をサポートしているらしいけれども、直接読み込むことはできず、コンバータが必要とのこと。コンバータクラスが見つからず挫折。
かなり粘ったけど気分転換に違うものを漁ることに。
【bullet】
またC++。jbulletの本家。これも簡単に動きました。
そして「GyroscopicDemo」というコマっぽいデモが標準で搭載。
これは円錐もあるし、今度こそいけるか?と思うも、結局CADモデルを読み込む部分で苦闘。
他にも、【unity(PhysX)】を使いましたが、ファイル処理で挫折。
結局、ダメなのはファイル入出力部分であったので、次はCADモデルのデータ構造を勉強することにしました(初めからこうすればよかった)。
その結果、CADソフトで出力可能なSTL形式、これは単に三角メッシュの情報が羅列しているだけみたい。
このファイル形式を読み込んで、プログラム上で3Dモデルに変換するコードを自分で書く方針に決定。
楽をするために色々なエンジンを試して、便利なプラグインやライブラリを探しながら、ここに至るまで約2週間。急がば回れでした。