適切な世界マトリックスのスケール、回転、および変換マトリックスを乗算する正しい順序は何ですか?


62

プラットフォームとしてDirectXを想定します(それが重要な場合)。(そうでないことは確かです)

適切なスケール、回転、および並進行列があると仮定して、それらをどの順序で乗算して適切な世界行列を作成しますか?その理由は何ですか?

「適切」とは、「DirectXにまっすぐ投げて、最も一般的に使用される3Dフレームを取得できる」という意味です。


6
ここでの説明である「回転、その後翻訳」(周回)対(回転)「を翻訳し、その後回転」の
bobobobo

リンクは良好ですが、わずかなエラーがあります。球体は平行移動することでその位置から離れる傾向があるため(軸上にとどまるため)、回転効果ではなく回転する必要があります。
18

回答:


77

通常、スケール、回転、最後に平行移動です。マトリックス表記(つまり、変換マトリックスのT、回転マトリックスのR、スケーリングマトリックスのS)を使用すると、次のようになります。

T * R * S

ただし、特定のポイントを中心にオブジェクトを回転させる場合は、スケール、ポイント変換、回転、最後にオブジェクトの変換です。

理由:まず、翻訳が適切に機能するようにオブジェクトを拡大縮小します。次に、軸を回転して、調整された軸で平行移動が行われるようにします。最後に、オブジェクトをその位置に変換します。

OpenGLでは、gluLookAtを使用して、1回の呼び出しで完全なカメラ変換を取得できます。DirectXについても同様の呼び出しが行われる可能性があります。


11
そして、中心の周りを変形したい場合は、まず原点を中心にオフセットするために翻訳する必要があります。次に、ユーザー392858が述べたとおりに行い、それから同じ量だけ原点から離れるように再度翻訳する必要があります。ただし、これは2Dでのみ必要です。2Dでは、原点の左上にスプライトがあります。
エンジニア

すばらしいです。:)ここで、モデルが水平ビューで反転し、垂直ビューで反転した指向性ライトのドット積が必要な理由を理解する必要があります。それはそれを行うために使用されていなかったし、私はいくつかの数学を固定...
Narfマウス

ただ注意してください、私はマイナス記号の置き間違いを嫌います。とにかく、ありがとう、そしてあなたはこの質問が終わったと考えることができます。:)
マウスナルフ

問題ありません。いつも喜んでお手伝いします。
ラファエルR.

2
@Matthias私の知る限り、それは変換するベクトルをどのように乗算するかに依存します。M * vを掛けると、はい、答えの順序が逆になります。
bialpio

-4

平行移動の回転とスケーリングは、操作を実行するシーケンスです


-5

私はそれが翻訳ローテーションとダイヤルだと信じています


2
これは、既存の回答以上の説明を提供しません。
DMGregory
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.