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 とか)は使えなさそうだ。
それっぽいメンバ自体が見当たらない。


まあ、インポートさえ出来てしまえば、あとは使いやすいデータ構造に最適化すれば良い。
ロード時のオーバーヘッドが多少大きくなるが。