麻烦动画四元数Slerp

时间:2016-02-16 23:33:36

标签: c++ quaternions

我正在尝试为我的FPS相机设置从q1到q2的slerp动画。我的世界某处有一个目标,我希望相机从当前轴平移到我的目标。根据我的理解,这样做的方法是计算表示我当前(axis, rotation)的四元数和代表我的最终(axis, rotation)的第二个,然后每帧增加我在两者之间插入的数量从0到1。这是正确的想法吗?

我不明白如何计算这些开始和结束四元数?

我的相机非常标准,并且具有通常的成员变量:

glm::vec3 position,forward, up, yAxis, target;
glm::quat orientation;

1 个答案:

答案 0 :(得分:0)

注意:
这篇文章中的=代表数学方程式,而不是赋值。 (遗憾的是我们在stackoverflow上没有数学模式)

如果你的相机已经有一个描述其旋转的成员 - 四元数,我想你有这个四元数。如果没有,您也可以使用相同的技术来找到它:

如果您知道旋转轴vec3 r和角度a,那么您的四元数为vec4 q = (cos(a/2), sin(a/2)*r)(及其任意倍数)。然后,您的旋转向量为vec3 v' = q v inv(q)

我假设您希望相机仍然指向上方,然后您可以将旋转分成两个旋转,一个围绕全局上轴(可能是y),另一个围绕相机的局部水平轴(可能是x)。 所以你的轮换是:

vec3 v' = g l v inv(l) inv(g)
g = (cos(a/2), sin(a/2)*(0,1,0))
l = (cos(b/2), sin(b/2)*(1,0,0))

添加

vec3 normal(viewDirection) = g l (0,0,1) inv(l) inv(g)

(因为以后你想让你的相机z轴点在你的viewDirection中)你应该能够解决方程式。