OpenGL プログラムで使用するモデルデータ形式は .x にしようと思う
いろいろ調べていろいろ悩んだ末、OpenGL で使用するモデル形式は、DirectX で使用される X ファイル形式にすることにした。
そこにいたる過程を書き残しておこう。
まったく無知だった頃
OpenGL をまったく知らなかった数年前、OpenGL ではどういう形式のモデルデータを採用しているのか調べていた。
結論としては、OpenGL には、DirectX の .x のような標準の形式は存在せず、自分で自分のプログラムにあわせて定義する必要があることを知った。
なんと面倒な、と当時は思った。
六角大王形式
六角大王のデータ構造は、公開されていて、しかもテキスト形式なので、かなり取り扱いが簡単だなー、と漠然と考えていた。自作するなら六角大王形式(.rok)を読み取るようにしよう、と。
ただ、検討する過程で以下のことに気が付いた。
- 六角大王は左右対称という制限がある
- モーションも扱いたい
ということで、六角大王形式は見送ることにした。
RokDeBone2
六角大王形式やメタセコイア形式を読み込んで、ボーンを入れたりモーションを入れたりできるツール。かなりの完成度。
ただ、出力ファイル形式が同氏の作成する Easy3D というライブラリで読み込む形式になっている(と思われる)ので、使用を見送ることにした。
ファイルフォーマットの仕様が開示されていれば、このツールで決まりだったんだけど。
DXF フォーマット
CAD の標準交換フォーマットは .dxf だと聞いたことがある。.dxf もテキスト形式なので、パーサーが造りやすいと思う。以下 .dxf フォーマットへのリンクが良くまとめられているサイト。
ただし、CAD はモーションが必要ない世界なので、ゲームなどに使用するフォーマットとしてはちょっと弱い。
余談だが、上記の参考ページに挙げた方のプログラミングのページはとても有用。
X ファイル
X ファイルはモデルもモーションも定義することができて、形式もテキストとバイナリがあり、以下に詳細な仕様が開示されていて、しかも日本語だったりするのでとてもありがたい。
他にも以下で説明を見つけた。
X ファイル形式の仕様はかなりのボリュームがあるので、パーサーの実装だけでかなり骨が折れると思う。自分の使用する範囲を少しずつパースするのが良いのだろう。
この方は、実際に X ファイルを読み込んで OpenGL に渡すローダーのサンプルを自作されている。
結論
一番いいのは六角大王 Super の .6kt と .6ke をそのまま読み出せることなんだけど、フォーマットがどうなっているかわからないので断念せざるを得ない。
結局 X ファイルがフォーマットの情報が日本語で提供されており、モーション(X ファイル用語アニメーション)も持てるので、これで決まりな感じ。