XNAでCOLLADA読み込みの続き。
Blenderで吐き出したCOLLADAはアニメーション付きでバグってて嵌った。
Body.003とかの名前のメッシュがある時にBody_003てな名前のスケルトンか何かが出来て#Body_003で参照して欲しいんだが、#Body.003とかになってしまうので参照が解決できない。
これxsdで検証しても通っちゃうから分かりづらかったぜ。XMLは参照とかが解決できないから正直COLLADAの用途向きじゃないと思うんだけどなぁ。
なにはともあれアニメーションを読み込もうとしたんだが。
めんどくせーーーーーーーーーーーーーーーー!!
思うんだがCOLLADAのアニメーションって適当に作ってね?
1.3の段階ならこのアニメーションはまだ理解できるんだが、1.4でライブラリが細かく分かれたりしたのに、アニメーションはそのままってのが解せないね。
いや、これ、ほんとにどうすりゃいいの。
以前も書いたけど、channelのtarget属性を解決してみないと、一体何を参照してるのか分からない上に、targetにはほぼ何でも指定できちまう。
任意の型の値を入力できてほぼ任意の場所に出力できる。これが単一の構文でできるってことだ。すげー。柔軟すぎて意味わかんねー。
しかも出力先の参照は独自のパス構文。マジ死んだ方がいい。 COLLADAはXMLという選択が間違いだったということを自ら認めるのかと。
まあ以前やった時のソースを見たら、認識できる出力先(ノードの変形)だけ全部解決して、数値を全部サンプリングして行列に直して、キーフレームと行列の組に変換してた。
もうこうやって手抜くしかないぜー、とか思ったんだが、全然手抜いてないな。普通にやってるじゃん。
これしかないよな。
だっていきなりなんだか分からない配列の途中とかいじられても困るしな。
あ、COLLADA RTでも参考にすりゃいいのか。そうか、調べてこよう。
調べてきた。出力先に変形しかサポートしてねぇ。行列すら無し。行列の要素に直出力までサポートしてた俺は馬鹿か。
UVアニメーションとかは1.4xで表現できるようになったらサポートするね、とか書いてあるがサポートしてるじゃねぇか。ほら、頂点データ直アクセスでさ!
COLLADA FXとかCOLLADA Physicsはいいんです。そんなことよりアニメーションをまともにしてください!
追記:今気付いた。COLLADA RTでは補間方法無視して線形補間してんじゃん! そりゃそうだよな。仕様が意味不明だもんな!
意味不明な例
<Name_array>BEZIER STEP LINER</Name_array>
どこをどうやって補間しろと?