ソフトウェア開発したい日記

「面白い!」と思った頭の体操や、数学の問題を載せていきます
その他ロードバイクででかけた先の写真や、ソフト開発のメモ等

コマ大戦のためのコマシミュレーション 1

2013年06月08日 22時24分44秒 | ソフト開発日記

これから再びちょこちょこと書き始めます。

 

開催が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週間。急がば回れでした。