IKがようやく動いた

苦労したよw。
モーション関連でいろいろバグがありそうだったので、スキニングの処理に沿ってデータの読み込みから最終の行列まで途中の値をユニットテストで辻褄を合わせていく作業を敢行した。
まず、リファレンス実装として
http://r13n.spaces.live.com/
からソースを頂いてきてビルドできることを確認。
その後に、自作のツールともらってきたソースを平行して動作させつつ、モーションロード、キーフレームの補間値、ボーン毎の回転・移動、スキニングの途中行列あたりをASSERT_EQで片っ端から照合。インタフェースが無いときもテスト用の関数を追加したりと改造しつつ進行したところ、IKが動くところまで直すことができた。適当に作った数学ライブラリがわりと微妙だったり(Quaternion・行列の変換やオイラー角の順番とかいろいろ問題ありw)、IKで使う行列を取り違えていたりするのが見つかってよかった。
あと空間が歪むのは本来はQuaternionをSlerpすべきところを、各要素を線形補間していたところだった。まだ動きが怪しくて、特にIKの計算結果がだいぶずれているのが気になるところだが、途中計算を細かくチェックするのは骨なのでそのうちやろう。順番的にはモーフとbulletかな。影とかトゥーンもやりたいが手が回らん。

▲足が動くようになった