C# 如何求给定方向向量和上方向向量的x、y和z旋转角?

C# 如何求给定方向向量和上方向向量的x、y和z旋转角?,c#,vector,matrix,xna,transformation,C#,Vector,Matrix,Xna,Transformation,我有一个超类对象,它表示场景中的模型。该对象包含一个3D矢量,position表示其位置,以及三个变量x、y和z,用于描述其围绕这些轴的旋转。其变换矩阵计算如下: Matrix.CreateRotationX(x) * Matrix.CreateRotationY(y) * Matrix.CreateRotationZ(z) * Matrix.CreateTranslation(position) 这一切都很正常,但在某些情况下,我需要根据归一化方向向量和上方向向量计算x、y和z的值。我该怎么

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

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

这一切都很正常,但在某些情况下,我需要根据归一化方向向量和上方向向量计算
x
y
z
的值。我该怎么做呢?

我自己不知道怎么做,但Matrix.CreateLookAt不能满足您的需要吗

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

将矩阵转换为四元数:

Quaternion q=Quaternion.CreateFromRotationMatrix(矩阵)


然后复制粘贴并在其中运行四元数。

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

()


在我看来,您可能不应该使用或存储对象的Euler旋转。()

我不完全确定你在问什么,但是如果你想知道如何对向量进行归一化,你可以使用Vector3.Normalize()来确认:你是在问,对于给定的向量,如何确定围绕三个轴的等效旋转?@lzcd是的,对于给定的向量,我想要
x
中所有三个轴的旋转,
y
z
变量,以便我以后可以使用
Matrix
类的
CreateRotation…
方法计算旋转矩阵。除了超类将
x
y
z
组件单独存储,而不是使用
矩阵
Matrix.CreateWorld(position, direction, up);