0

多くの数式と変換を試しましたが、期待どおりの結果が得られませんでした。

シナリオは非常に単純です。

3DS Max やその他の 3D ソフトウェアは、ローカル回転の増分をグローバル絶対回転に「変換」する方法を教えてください。

理解に役立つ例: 3DS Max - Maya - Modo (3 つすべてで同じ結果が得られたので、この結果は正しいと思います。) 絶対回転順序を XYZ と仮定します。

1. World Rotation Y = 35.0;
2. Local Rotation X = 35.0;

これらの変換の後、この順序で、World Absolute 回転を見て、私が見るものはX:40.524 Y:-28.024 Z:-21.881

彼らはどのようにその結果を達成しますか? どんな式?行列、オイラー角、四元数などを使用して、どうすれば同じ結果を得ることができますか?

ありがとうございました。

PS: 簡単な解決策は、クォータニオンまたはマトリックスを使用し、ローカル回転をグローバルに追加してから、絶対結果を取得することです。しかし、この方法では回転順序を制御できないため、うまく機能しません。結果は常に数式の順序を使用して値を取得します。

4

2 に答える 2

1

ローカル回転が最初に適用される場合(私はそうであると思われます)、回転が適用される順序に応じて、回転行列を順番に乗算します。

WorldMat * LocalMat [* column vector]

(変換を適用するために列ベクトルを事前に乗算している場合、逆の方法で行う場合は、式全体の転置を取るだけです)

同様に、クォータニオンを使用している場合は、クォータニオンを乗算する必要があります (加算ではありません)。

于 2011-06-06T15:24:59.487 に答える
0

回転行列は次のようになります(列ベクトル表現を想定)。

[   1      0       0   ]
[   0    cos(a)  sin(a)] = Rx(a)
[   0   -sin(a)  cos(a)] 

[ cos(a)   0    -sin(a)]
[   0      1       0   ] = Ry(a)
[ sin(a)   0     cos(a)]

[ cos(a) sin(a)   0    ]
[-sin(a) cos(a)   0    ] = Rz(a)
[   0      0      1    ]

'local'を掛けると、行列が右に行くことを意味します。'global'を掛けると、行列は左側になります。したがって、回転はRy(35°)* Rx(35°)です。またはおおよそ:

[ .819  .329 -.469 ]
[  0    .019  .574 ]
[ .574 -.470  .671 ]

オイラー回転次数XYZは、Rx(ax)* Ry(ay)* Rz(az)を意味します。したがって、数値Rx(40.524°)* Ry(-28.024°)* Rz(-21.881)をプラグインすると、ほぼ(丸め誤差の範囲内で)同じ行列が得られます(念のために試しました) )。

于 2011-06-17T04:16:42.390 に答える