8

我有一个代表 3D 角色上臂旋转的四元数。我还有一条线应该代表该角色手臂的新位置。该线位置由两个 3D 点给出。

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

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

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

4

1 回答 1

8

在您的上下文中(以及在大多数计算机图形上下文中),四元数用于表示旋转。您不想直接使用 X、Y 和 Z;相反(如上面链接的教程中所述),您使用它来生成旋转矩阵然后,您应该像使用任何其他3D 变换矩阵一样使用旋转矩阵;它将围绕原点旋转点,如它来自的四元数所描述的那样。

四元数的 X、Y 和 Z 确实代表了旋转的轴,但四元数也以一种不特别直接的方式编码了旋转的幅度。如果您的包包含返回四元数的函数,它还应该包含将其四元数转换为旋转矩阵的函数;如果可能,您应该使用打包的函数(因为它应该使用与生成它们的方法相同的约定)。

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

于 2011-12-24T21:59:48.647 回答