2011-12-22 82 views
7

我有一个代表三维人物上臂旋转的四元数。我也有一条应该代表角色手臂新位置的线条。该线位置由两个3D点给出。Quaternion的方向矢量?

这是我拥有的唯一数据,我试图在3D包(数字符文)中调用一个方法,该方法需要2个方向向量并返回表示将手臂移动到新位置所需的旋转的四元数。

问题是我看到一些奇怪的行为,就好像这些轴被混淆并且它通常不起作用。此外,代表3D家伙手臂的Quaternion对象(来自3D软件包)具有W,X,Y和Z.X,Y和Z代表方向矢量吗?因为这正是我需要正确调用该功能的原因。我一直在使用这一点,以及从我的线的端点计算出的方向矢量,但正如我所说,它看起来很有趣。

如果X,Y和Z不是方向矢量,如何将四元数转换为两个端点,以便我可以计算方向矢量?

+2

这可能是有用的http://stackoverflow.com/q/1171849/10468和这个http://stackoverflow.com/q/2646121/10468 – DarenW 2011-12-23 07:17:30

回答

7

在你的上下文中(以及在大多数计算机图形环境中),一个quaternion is used to represent a rotation。你不想直接使用X,Y和Z;相反(如上面链接的教程中所述),您可以使用它来生成rotation matrix。您应该像使用其他3D transformation matrix一样使用旋转矩阵;它将按照它所来自的四元数描述的原点围绕原点旋转。

四元数的X,Y和Z do表示旋转的轴,但四元数也以非常直接的方式编码旋转的大小。如果你的软件包包含返回四元数的函数,它还应该包含将其四元数转换为旋转矩阵的函数;如果可能的话,你应该使用打包函数(因为它应该使用与生成它们的方法相同的约定)。

读完四元数和变换矩阵之后,您应该仔细阅读相关函数的文档,以确保您提供了正确的参数类型,并确保您使用的结果是正确的方式(很容易把它搞砸,即使你熟悉数学......)。