如何找到给定方向向量和向上向量的x,y和z旋转角度?

时间:2011-11-28 22:13:01

标签: c# vector matrix xna transformation

我有一个超类对象,它代表一个场景中的模型。此对象包含一个3D矢量,position表示其位置,三个变量xyz描述围绕这些轴的旋转。其变换矩阵计算如下:

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

这一切都正常,但在某些情况下,我需要根据标准化方向向量和向上向量计算xyz的值。我怎么能这样做?

3 个答案:

答案 0 :(得分:0)

不知道如何自己做数学但是不会Matrix.CreateLookAt满足你的需求?

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

答案 1 :(得分:0)

将矩阵转换为四元数:

Quaternion q = Quaternion.CreateFromRotationMatrix(matrix);

然后复制并粘贴the last method found on this page并通过它运行四元数。

答案 2 :(得分:0)

与ClassicThunder的答案相同(具有相同的限制,它可以为您提供所需的矩阵,而不是角度),除了它比使用CreateLookAt(实际上是用于制作视图矩阵)更好一点

Matrix.CreateWorld(position, direction, up);

MSDN

IMO,你应该不应该使用或存储对象的Euler旋转。 (see also