CCD-IK。 VMDのIK再生。 http:part10.html
まず、練習に2次元のシンプルなボーンに対するIKを実装して仕組みを理解する。
IKに必要な要素 * IKで動くボーン(エフェクタ) * エフェクタの親ボーンでIKによりエフェクタと一緒に動くボーンたち(IKチェイン) * エフェクタの移動目標(ターゲット)
今回は原点から生えた4連続のボーン末端をエフェクタとし、その3つの親ボーンをIKチェインとする。ターゲットはマウスカーソルとする。IK解決のアルゴリズムはCCD-IKを使う。
<%= source_view(‘src/IK2D.py’) %>
RotTransクラスは回転と移動をまとめたクラス。目的は逆行列の計算を簡略化すること。 回転行列と移動行列の積であることが分かっている場合は、3x3回転行列とx, y, zの移動の組み合わせで以下のように書くことができる。
__TEX__ left(begin{array}{cccc} r_{00} &r_{01} &r_{02} &0 \ r_{10} &r_{11} &r_{12} &0 \ r_{20} &r_{21} &r_{22} &0 \ x &y &z &1 \ end{array}right) = left(begin{array}{c|c} R &0 \ hline L &1 \ end{array}right)
となるのでまじめに4x4の逆行列を作らずに済むという寸法。