我正在尝试为我的FPS相机设置从q1到q2的slerp动画。我的世界某处有一个目标,我希望相机从当前轴平移到我的目标。根据我的理解,这样做的方法是计算表示我当前(axis, rotation)
的四元数和代表我的最终(axis, rotation)
的第二个,然后每帧增加我在两者之间插入的数量从0到1。这是正确的想法吗?
我不明白如何计算这些开始和结束四元数?
我的相机非常标准,并且具有通常的成员变量:
glm::vec3 position,forward, up, yAxis, target;
glm::quat orientation;
答案 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中)你应该能够解决方程式。