2012-11-02 53 views
3

我開發的XNA(C#)遊戲之間的不同,我想知道如何使用2.0版本改造。在我的想法,在此功能的工作原理是:什麼Vector2.Transform()和Vector2.TransformNormal()在XNA(C#)

(假設向量源於Matrix.Identity

  • Vector2 resultVec = Vector2.Transform(sourceVector, destinationMatrix);用於位置向量改造。

  • Vector2 resultVec = Vector2.TransformNormal(sourceVector, destinationMatrix);用於轉換速度矢量

這是真的嗎?誰知道詳細的解釋,請幫忙!

+0

您是否試過閱讀文檔?快速搜索顯示「Transform」用於位置矢量,「TransformNormal」用於* normal *矢量。 –

+1

什麼是_normal vectors_? – CuongKe

+0

我從這裏閱讀了簡短描述:http://xboxforums.create.msdn.com/forums/p/58388/357821.aspx。但不太清楚 – CuongKe

回答

2

通過變換,函數會將源矢量與生成的矩陣相乘。

  • 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); 
3

簡單的回答是 -

Vector2.Transform()應用於整個Matrix向量,而

Vector2.TransformNormal()只適用於比例和旋轉部分向量的Matrix