pmdビューワみたいなのができてきた

いつもの自前主義が発動して夏前に書いていたMikotoモーションビューワ(頓挫中)みたいなのをまた作り始めた。
今度は、pmd/vmd形式が対象でwxPython(wx.GLCanvas)で書いている。wxAUIが使えれば何でもよかったが、OpenGLのコード残骸がディスクに残っているのでpythonバインディングにした。pythonにしたおかげでOpenGL部分はわりとさくさくだが、SJISUTF-8の混在が面倒くさいことに。PMDの読み込みに関しては、マテリアル・頂点・面・表情までできた。ボーンが作業中。ここからボーンの組み立てをやると、恒例のクォータニオン地獄に到達できる。いい加減クォータニオンのスキニングをマスターしたいところ。他に、GLSLのシャドウマップ、VertexShaderのスキニングあたりも射程に入れて進行中。

骨組み立て

普通に親子関係を再構築して各骨の頭と尻尾をつないでやるとわりとグチャッとした感じになってしまった。そこで、骨の種類毎に色を変えて整理してやるとこんな感じに(一部の後ろ側が不要と思われる骨は省いてある)。

参考にしている
http://blog.goo.ne.jp/torisu_tetosuki/e/209ad341d3ece2b1b4df24abf619d6e4
によるとボーンの種類は10種類となっている。

今の時点で各種類についてのメモ
0:回転(黄色) 回転のみ
1:回転と移動(黄緑赤) 回転と移動(骨が伸びる?)
2:IK (水色) IK
3:不明 欠番?データにも現れていない
4:IK影響下 データに現れず?
5:回転影響下(オレンジ。非常に見にくいが両目に存在) 視線の移動に関連する?
6:IK接続先 IKの目標。黒と重なって見えない
7:非表示(黒) ボーンの末端。ひとつ前のボーンの尻尾位置を決めている
(MMD 4.0〜)
8:捻り (黄緑)腕の捻り
9:回転運動(緑。上腕から枝分かれして存在)肩の運動か?

FK実装に続く