1

わかりました - これは私の以前の質問Transforming an object between two coordinate spaceに大きく関連していますが、より直接的であり、明白な答えがあるはずです。

オブジェクトのローカル座標空間、どうすれば「それを取得」できますか? オークをゲームにロードしたとします。頭、左腕、右腕、原点 (へそ?) がどこにあるかをプログラムでどのように知ることができますか? そして、それがどこにあるかがわかったら、手動で保存する必要がありますか、それとも DirectX API に魔法のように存在するものですか? 私の他の質問では、ある人が X、Y、Z 方向と原点の頂点を保存することについて何か言いましたか? これらの頂点を見つけるにはどうすればよいですか? ゲームにロードする前に、それらを任意に選択し、モデルに割り当てますか? 等

これは、座標空間間の変換に関するものではありません

4

1 に答える 1

4

実際には、座標空間間の変換についてです

わかりました。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のようなものでしょう。

于 2009-02-01T09:42:07.050 に答える