x ファイルのパーサーを作成
こんな感じにしようと思う(というか完成してるんだけど)。
x ファイルを実行時に動的に読み込むのは、汎用性がかなり高いんだけど、僕の最終的なターゲットはケータイなので、動的な読み込みは速度的に厳しいかも知れない。
という考え方により、x ファイルから C ソースファイルを生成するコンパイラを作成することにした。あらかじめ実行形式になっていれば、速度の心配はないだろう。
今回は下記で公開されている dosei.x というモデルを使用させてもらった。
x ファイルフォーマット
x ファイルのフォーマットは MSDN にX ファイル フォーマット リファレンスという便利なものがあるので、ここで調べる。翻訳がわかりづらい点を除いて、知りたいことはすべてここで調べることができた。
x ファイルは結構読みやすい簡単なフォーマットだった。コンパイラとかパーサーとかを一度でも実装したことがある人なら、簡単に構造を取り出せるだろう。
バイナリにコンパイル
できた C のソースコードをバイナリにコンパイルしてびっくりした。
もともと、サンプルとして使用させてもらった dosei.x は、形状が結構シンプルであるにもかかわらず、メッシュデータは 1MB ぐらいのサイズになる。これをオブジェクトにコンパイルすると、なんと 188MB に膨れ上がる。
あいたー、これは想定外だった。
gcc と cl の結果はほぼ同じ。最適化してないけど、しても変わらないだろう。99% がデータなんだし。
一応ケータイ向けを考えているので、この時点でアウト。というか、この方法だと、必要なくなったモデルを解放するという方法が取れない(わけではないけどかなり面倒な)ので、コンパイラではなくローダを作り直すことにしよう。