2016-02-16 22 views
0

我试图为我的FPS相机动画从q1到q2的slerp。我在我的世界的某个地方有一个目标,我想让相机从当前的轴上平移,看看我的目标。从我理解的方式来做到这一点将是计算一个四元数代表我目前的(axis, rotation)和第二代表我的最后(axis, rotation)然后每帧增量我插入之间的两个从0到1.这是正确的想法?麻烦动画四元数Slerp

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

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

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

回答

0

注:
=在这篇文章代表了数学公式,不分配。 (可悲的是,我们有没有计算器mathmode)


如果您的相机已经有一个成员 - 四元数,这说明它的旋转,我想你有这样的四元数。如果没有,你可以使用同样的方法来发现它还有:

如果你知道你的旋转轴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) 

(因为以后你想在你的viewDirection您的相机Z轴点),你应该能够求解方程。