2011-11-28 108 views
3

我有一個超類對象,它表示場景中的模型。該對象包含一個3D矢量,其位置爲position,三個變量爲x,yz以描述其圍繞這些軸的旋轉。它的變換矩陣的計算方法如下:如何查找給定方向矢量和向量矢量的x,y和z旋轉角度?

Matrix.CreateRotationX(x) * 
Matrix.CreateRotationY(y) * 
Matrix.CreateRotationZ(z) * 
Matrix.CreateTranslation(position) 

這是所有工作正常,但在某些情況下,我需要根據一個標準化的方向向量來計算xyz值和向上的向量。我怎樣才能做到這一點?

+0

我不完全確定你在問什麼,但是如果你想知道如何使用Vector3.Normalize() – annonymously

+0

來規範矢量,只需確認:對於給定的矢量,你如何確定圍繞三個軸的等效旋轉? – lzcd

+0

@lzcd是的,對於一個給定的矢量,我想要在'x','y'和'z'變量中的所有三個軸的旋轉,以便後來可以使用'CreateRotation ...'方法計算旋轉矩陣Matrix類。 –

回答

0

矩陣轉換爲四元數:

Quaternion q = Quaternion.CreateFromRotationMatrix(matrix);

然後複製並粘貼the last method found on this page並通過它運行你的四元數。

0

不知道如何自己做數學,但不會Matrix.CreateLookAt滿足您的需求?

Matrix.CreateLookAt(new Vector3(0, 0, 0), new Vector3(x, y, z), yourUpVector) 
* Matrix.CreateTranslation(position); 
+0

除了目前超類有'x','y'和'z'分量存儲而不是使用'Matrix'的時候。 –

0

同ClassicThunder的回答(用相同的限制,即它給你你想要的矩陣,而不是角度),但它比CreateLookAt搞亂(這實在是一種製造視圖矩陣)更好一點。

Matrix.CreateWorld(position, direction, up); 

MSDN

海事組織,你應該不應該使用或存放對象的Euler旋轉反正。 (see also