mio-0.1ソース解読

昨日1日はPyQT4のGUI解読に費やした。今日は本丸のVMD->BVH変換部分を解読中。printデバッグを駆使しながら読んでみたところ関数間の呼び出し関係はだいたいわかった。
事前に、
http://clogging.blog57.fc2.com/
http://sites.google.com/a/render.jp/vmdimporter/Home
blender向けのpmdインポータとvmdインポータを読んでいたので問題箇所だけに集中して読めるのは助かる。

IK解決は
vmd2bvh.py

vmd_animation.get_ik_less_pose_animation

キーフレーム毎に
pmd_model.get_ik_less_pose(vpd_pose)

IKチェイン(IK始点ボーンからIK終点ボーンまでのchainとikターゲット)毎に
__compute_ik_chain_ik

ik_armature.solve_for_pose(result_pose, chain_ik_pose, 30, 0.0001)

ここでpythonのcモジュールを介してc++に処理が渡る

void IKArmature::solve_for_pose(mio::rigging::Pose &result_pose, IKPose *pose, 
      int max_iteration, float error_threshold)

というところまではわかった。
ただ、この関数を読むには位階が足りませんw
コメントにはヤコビアンなどと書いてあります。
まぁ、こんなこともあろうかと先日入手したODE本

簡単!実践!ロボットシミュレーション - Open Dynamics Engineによるロボットプログラミング

簡単!実践!ロボットシミュレーション - Open Dynamics Engineによるロボットプログラミング

のPart3ロボットアームにヤコビ行列に関する章がいくつかあるので、
読んで理解できるかはわからないがこの辺りから逆運動学をはじめてみる。数学のターンが必要。


IKに関してはここまででいったん止めて、IK解決済みのボーンに対するスキニングの解読を先にやろう。これはプログラムの問題なので読めばわかる。