【问题标题】:Trouble Animating Quaternion Slerp麻烦动画四元数 Slerp
【发布时间】:2016-02-17 08:44:46
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ quaternions


    【解决方案1】:

    注意:
    本文中的= 代表数学方程式,而不是作业。 (遗憾的是我们在 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)您应该能够解方程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      相关资源
      最近更新 更多