【问题标题】:Will this cause gimbal-lock?这会导致云台锁定吗?
【发布时间】:2010-11-16 13:23:51
【问题描述】:

我制作了一个非常简单的 3d 场景,在世界坐标中有 5 个点。我想在场景中导航,所以我定义了一个带有 UP 和 OUT 矢量的相机。使用这些信息,我在每一帧中生成一个旋转矩阵,我将其应用于向量以获得相机坐标。

问题是:我已经阅读了关于使用这种方法的云台锁定问题,但是在这种情况下会发生吗?

请注意,我在每一帧中都生成了旋转矩阵,并且我没有累积旋转。那么在这种情况下会发生锁吗?如果是这种情况,您会建议如何安全地应用旋转(从 UP 和 OUT 向量)?

谢谢

【问题讨论】:

    标签: opengl 3d 3dcamera


    【解决方案1】:

    如果 OUT 你的意思是“前进”,并且它总是垂直于 UP 矢量,那么不,你不会遇到云台锁定。

    您正在做的是从 UP 和 FORWARD 向量创建一个方向矩阵,并应用每一帧,这是在空间中移动相机的一种相当常见的方法。 您没有使用欧拉角进行多次旋转,这可能是万向节锁定的原因。

    注意要创建矩阵,您还需要从 UP 和 FORWARD 向量创建一个“左”(或右)向量。对此的一个很好的介绍是 here - 请注意,该示例确实将旋转应用于相机矩阵,这是一个完全可选的步骤。

    维基百科对gimbal lock有很好的解释。

    【讨论】:

    • 感谢 Justicle,这正是我正在做的。我所说的 OUT 矢量是你的 FORWARD。有了这个(并应用叉积来获得第三个向量),我生成了一个正交矩阵,并乘以向量以使它们转换。感谢您的确认。我以某种方式确定万向节锁定不适用于这种情况,但想确保以防万一。
    • 没问题,记住它不是导致万向节锁定的矩阵,而是欧拉角的组合 - 请参阅维基百科链接。
    【解决方案2】:

    在使用矩阵方法生成旋转矩阵(X、Y、Z)然后将它们相乘得到最终的旋转矩阵时,您会遇到万向节锁定问题。如果我理解你会的,你使用 OUT 向量来获取角度(alpha,beta,gamma),然后你正在计算矩阵,最后 - 你将它们相乘以获得最终的旋转矩阵 - 然后是的,你会遇到万向节锁定。

    摆脱这个问题的一种方法是使用Quaternions 进行计算。

    另外,here 我找到了一些关于如何实现这些的 OpenGL 教程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多