4

XNA(C#)でゲームを開発していますが、2つのバージョンの変換を使用する方法を考えています。私の考えでは、この関数の動作は次のとおりです。

(ベクトルはから発生すると仮定しますMatrix.Identity

  • Vector2 resultVec = Vector2.Transform(sourceVector, destinationMatrix);位置ベクトル変換に使用されます。

  • Vector2 resultVec = Vector2.TransformNormal(sourceVector, destinationMatrix);速度ベクトルの変換に使用されます。

本当?。説明を詳しく知っている方、助けてください!

4

2 に答える 2

4

簡単な答えはそれです-

Vector2.Transform()全体Matrixをベクトルに適用します

Vector2.TransformNormal()のスケール部分と回転部分のみMatrixをベクトルに適用します。

于 2012-11-16T16:29:56.123 に答える
3

変換を使用すると、関数はソースベクトルに生成された行列を乗算します。

  • Transform()2Dまたは3D空間の位置を表すベクトルに使用されます。これにより、詳細には、座標を表す逆行列の転置(T演算子)が使用されます。

数学では:retVec = T(M ^ -1) x srcVec

  • TransformNormal()方向、接線ベクトルに使用されます。これにより、マトリックスが予約されます。

数学では:retVect = srcVec x M

ベクトルをある行列/座標から別の行列/座標に変換するには(たとえば、M1からM2) retVec = Transform by M1 -> then transform by invert of M2 ::

        Vector2 retVec = Vector2.Transform(vectorInSource, M1);

        Matrix invertDestMatrix = Matrix.Invert(M2);
        outVect= Vector2.Transform(retVec , invertDestMatrix);
于 2012-11-02T02:19:02.727 に答える