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()仅将 的 Scale 和 Rotational 部分应用于Matrix向量。

于 2012-11-16T16:29:56.123 回答
3

通过变换,函数将源向量与生成的矩阵相乘。

  • Transform()用于表示 2D 或 3D 空间中的位置的向量。详细地说,这将采用 Invert 矩阵的 Transpose(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 回答