Assimp を使う
*.dae ファイルからモデリングデータを抜き出すために、Collada Dom でインポートライブラリを作っていたのだが、あまりに面倒臭い(特にアニメーション)ため、Assimp というライブラリを使うことにした。
ちなみにこのライブラリ、Collada 以外にも色々なフォーマットに対応している。
【Assimp】
http://assimp.sourceforge.net/lib_html/
void import(const char* filename) { Assimp::Importer importer; const aiScene* scene = importer.ReadFile(filename, aiProcessPreset_TargetRealtime_Fast); if (!scene) printf("%s read ng : %s\n", filename, importer.GetErrorString()); }
上記のやり方で簡単にインポートできる。
ただし注意点があって、インスタンス1個につき1個しかシーンオブジェクトを保持することができないようだ(2個目を読み込むとエラーが返ってくる)。
つまり *.dae ファイル分のインスタンスが必要になる。
まだあまりリファレンスを見ていないのだが、シェーダ(cgfx とか)は使えなさそうだ。
それっぽいメンバ自体が見当たらない。
まあ、インポートさえ出来てしまえば、あとは使いやすいデータ構造に最適化すれば良い。
ロード時のオーバーヘッドが多少大きくなるが。