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

3

我有一个代表场景中模型的父类对象。这个对象包含了一个三维向量 position,用于表示它在场景中的位置,以及三个变量 xyz,用于描述它沿着这些轴的旋转。它的变换矩阵计算如下:

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

这一切都很好,但在某些情况下,我需要根据规范化的方向向量和上向量计算xyz的值。你该怎么做呢?


我不是很确定你在问什么,但如果你想知道如何归一化一个向量,你可以使用Vector3.Normalize()函数。 - annonymously
只是确认一下:您是在问,对于给定的向量,如何确定围绕三个轴的等效旋转? - lzcd
@lzcd 是的,对于给定的向量,我想要在 xyz 变量中得到所有三个轴的旋转角度,以便稍后可以使用 Matrix 类的 CreateRotation... 方法计算旋转矩阵。 - Matthew Bird
3个回答

0

0

我自己不知道如何进行数学计算,但是Matrix.CreateLookAt是否能够满足您的需求呢?

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

目前,超类将 xyz 组件分别存储,而不是使用矩阵。因此,它会出现异常。 - Matthew Bird

0

与ClassicThunder的回答相同(具有相同的限制,即它为您提供所需的矩阵,而不是角度),除此之外还要好一些,因为它比与CreateLookAt(实际上是用于创建视图矩阵)混合要更好。

Matrix.CreateWorld(position, direction, up);

(MSDN)

我认为,你可能不应该使用或存储对象的欧拉旋转。(另请参阅)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接