実際には、座標空間間の変換についてです。
わかりました。Translation または Rotation を実行する Matrix を使用できることがわかりました。(またはスケーリング。またはスキューなど)そのようなマトリックスにポイント(V)を掛けて、新しい(平行移動/回転/その他)ポイントを取得できること。例えば:
Mtranlate = [ 1 0 0 Tx ] * V = [ Vx ] = [ Vx + Tx ]
[ 0 1 0 Ty ] [ Vy ] [ Vy + Ty ]
[ 0 0 1 Tz ] [ Vz ] [ Vz + Tz ]
[ 0 0 0 1 ] [ 1 ] [ 1 ]
または、X/Y/Z 軸を中心とした回転:
Mrotate_x = [ 1 0 0 0 ] * V = [ Vx ] = [ Vx ]
[ 0 cos -sin 0 ] [ Vy ] [ Vy*cos - Vz*sin ]
[ 0 sin cos 0 ] [ Vz ] [ Vy*sin + Vz*cos ]
[ 0 0 0 1 ] [ 1 ] [ 1 ]
行列を乗算することにより、複数の操作を組み合わせることができること。
例: Mnew = Mtranslate * Mrotate_x。
(そして、はい、順序は重要です!)
したがって、実際のベース原点が与えられた場合、(既知/提供された) オークの xy 位置に変換し、その時点の地形からオークの足の z 位置を推測し、それに変換することができます。これで、グローバル座標にオークの「足」ができました。そこから、オークが特定の方向を向くように回転させたい場合があります。
次に、(オークのモデルに基づいて)上向きに移動して、首を見つけます. 首から上向きに移動 (およびおそらく回転) して頭を見つけたり、肩を見つけたりすることができます。肩から、回転および平行移動して肘を見つけることができます。肘から、回転および平行移動して手を見つけることができます。
orc モデルの各コンポーネントには、ローカル参照フレームがあります。それぞれは、1 つ以上の変換 (行列) によって関連付けられている参照フレームに関連付けられています。すべてのローカル マトリックス (変換) を乗算することで、オークの足から手に移動する方法を最終的に確認できます。
(気をつけてください、私はオークをアニメーション化して、彼の足の x、y、z 位置を使用します。そうしないと、作業が多すぎます。)
この種のことはロボット工学でよく見られ、フォワード キネマティクスの初歩的な入門として役立ちます。ロボット工学では、少なくともより単純なロボットでは、回転するモーターと、移動する手足の長さがあります。そして、もう1つのモーターがあります。(対照的に、人間の肩関節は 3 つの軸すべてを一度に回転させることができます。)
CMU の Robotic Manipulation クラス (15-384) のコース配布資料を参照してください。
おそらく、 Forward Kinematics Introのようなものでしょう。