臨時企画として、C++でDirectXを使った3Dアニメーションの勉強をしていた。
その勉強の復習もかねて、そのときに作ったビューワをC#のXNAに移植しようと。
今回はPMDファイルから読込んだ初期姿勢のボーンを表示してみた。
本当はFKの実装まで行きたかったのだが、C++版のFK実装のときの理解が十分ではなかったので今日はあきらめた。
各ボーンのワールド座標変換用のマトリクスの計算の仕方もややこしいのだけれども、それは理解できた、たぶん。
ただ、それを実現するためのデータ構造が、単純に読込んだデータを持っているだけでは不十分だた言うことが判明。
で、どういうデータ構造にすれば、無駄なく(少ない計算回数で)キーフレームのワールド座標変換マトリクス(しかもボーン毎の)を算出できるか考えていた。
途中で、頭がわーとなって、パンクしそうになったのであきらめたとです。わはは。
俺のポンコツ頭め!
とりあえず、PMDに入っているボーンデータの初期姿勢(つまり各ボーンの座標)は、モデルのローカル座標で入っていることがわかったので、そのまま描画してみた。
その動画がこちら。
色とボーンの種類の対応はこちら。
public Color[] boneVariations = new Color[] { // 0:回転 Color.Yellow // 1:回転と移動 , Color.Red // 2:IK , Color.Cyan // 3:不明 , Color.Purple // 4:IK影響下 , Color.Green // 5:回転影響下 , Color.Orange // 6:IK接続先 , Color.Blue // 7:非表示 , Color.White // 8:捻り , Color.Magenta // 9:回転運動 (8, 9はMMD4.0以降) , Color.DarkGray };
Related Posts
カテゴリー: csharp