代码之家  ›  专栏  ›  技术社区  ›  thekidder

用四元数沿球面运动

  •  5
  • thekidder  · 技术社区  · 16 年前

    2 回复  |  直到 16 年前
        1
  •  5
  •   andand    16 年前

    假设你有两个向量来描述相机的方向。一个是你的 V' up 描述哪条路是相对于相机方向的,另一条是你的 V' norm p' ,有时您的相机位于何处。定义一个规范的方向和位置,如:

    Vup = <0, 1, 0>
    Vnorm = <0, 0, 1>
    p = <0, -1, 0>
    

    给定四元数旋转 q 然后将旋转应用于这些向量以获得:

    V'up = qVupq-1
    V'norm = qVnormq-1
    p' = qpq-1

    在您的特定情况下,您可以定义 问 以递增方式累积导致应用于摄影机的最终旋转的各种旋转。其效果将是它看起来像你所描述的。也就是说,您将相机移动到一个静态定向和定位的球体内,而不是围绕一个静态定向和定位的相机移动spehere。

    每一个增量都是通过绕矢量旋转一个角θ来计算的 V = V' up x V' norm .

        2
  •  1
  •   Marcelo Cantos    16 年前

    四元数通常用于避免自由空间运动(飞行模拟机等)中的万向节锁。在你的例子中,你实际上想要万向节的效果,因为一个被迫保持直立的相机将不可避免地表现出奇怪的行为,当它必须指向几乎直上或直下。

    推荐文章