5

我只是更深入地研究了 3D 游戏编程中四元数的使用(是的,我知道矩阵,它们没问题,但我们总是要学习一些新东西),所以,我们可以像这样旋转一些对象Pout = q*Pin*conjug(q),q是四元数,Pin 是 Vector3 类的一个对象(假设我们正在使用某个框架,其中为我们定义了这个类),conjug(q)它是共轭后的 q 四元数,最后Pout是新 Vector3 的对象,我们得到了在将初始 Vector3 的对象旋转Pin某个角度 alfa(或 theta,无论你喜欢什么)之后。另外,我知道有一种组合旋转的方法,如下所示:q_final = q2*q1(这表示先旋转 alfa1 再旋转 alfa2 角度)。最后,点积表示球体中 2 个四元数之间的角度。这对我来说很清楚。我的问题将涉及诸如除法,加法和减法之类的事情。

我的问题是:谁能告诉我,它们(四元数的除法、加法、减法运算)在 3D 编程中代表什么?它们将如何影响 3D 模型?

预先感谢您的回答。

ps如果你(DarenW、bensiu、Dharmendra、Uwe Keim、Jennis)不能理解这个问题,请离开这个话题。有人可能会给出答案。谢谢你。

4

1 回答 1

11

如您所知,四元数可以用 4x4 实矩阵来识别。此标识保留了四元数乘法、标量乘法和加法(参见http://en.wikipedia.org/wiki/Quaternion#Matrix_representations)。因此,将两个四元数转换为 4x4 矩阵,将它们相加,然后再将它们转换回来与仅将它们相加相同。乘法也是如此。

四元数 A 除以四元数 B 无非就是将 A 乘以 B 的乘法逆。这相当于 A 的矩阵形式乘以 B 的矩阵形式的逆。

请注意,刚体旋转(无剪切或缩放)由单位长度四元数表示。因此,您可以通过乘以单位四元数来累积旋转。在这种情况下,加法没有那么有用。

最后,我们在图形中使用四元数的主要原因是插值关键帧(例如Eberly 1999)。也就是说,如果我们知道在k个位置的期望旋转,我们可以对四元数进行插值,例如使用样条,得到四元数值曲线。每个值 C(t) 是一个单位四元数,因此它代表一个中间旋转。齐次矩阵的关键帧插值更难,因为并非所有 4x4 矩阵都表示齐次变换:插值过程可能会添加缩放、剪切等。

于 2012-10-30T22:07:33.537 回答