1

回転に少し問題があります。モデルが回転しますが、カメラ アングルの位置が中心ではなくわずかにずれます。これが私の回転コードです。これは正しいですか?

matrix m = matrix.createrotationZ(MathHelper.ToRadian(30))
matrix object = matrix.createtranslation(objectPos) * m;
4

1 に答える 1

1

Lucius がコメントで述べているように、行列は一連の線形変換を表します。それらを乗算する順序は重要です。

RotationMatrix*TranslationMatrixは、「このモデルをモデル空間で軸を中心に回転させ、回転したモデルをワールド空間に変換する」ことを意味します。

TranslationMatrix*RotationMatrixは、「このモデルをワールド空間に変換してから、ワールドの原点を中心にモデルを回転させる」ことを意味します。

行列の乗算の順序を変更します。

余談ですが、*演算子を使用して行列を乗算すると、シーケンスにさらに変換を追加し始めると、すぐに負荷が高くなる可能性があります。実際には使用されない多くの余分な行列が作成される可能性があります。これは、クラスで静的Multiply()メソッドを使用して最適化できます。Matrix

于 2013-03-22T13:30:10.450 に答える