Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我制作了一个非常简单的 3d 场景,在世界坐标中有 5 个点。我想在场景中导航,所以我定义了一个带有 UP 和 OUT 矢量的相机。有了这些信息,我在每一帧中生成一个旋转矩阵,我将把它应用到向量上以获得相机坐标。
问题是:我已经阅读了关于使用这种方法的万向节锁定问题,但在这种情况下会发生吗?
请注意,我在每一帧中生成旋转矩阵,并且我没有累积旋转。那么在这种情况下会发生锁吗?如果是这种情况,您会建议如何安全地应用旋转(从 UP 和 OUT 向量)?
谢谢
如果 OUT 你的意思是“前进”,并且它总是垂直于 UP 矢量,那么不,你不会遇到万向节锁定。
您正在做的是从 UP 和 FORWARD 向量创建一个方向矩阵,并应用每一帧,这是在空间中移动相机的一种相当常见的方法。您没有使用欧拉角应用多次旋转,这可能是万向节锁定的原因。
请注意,要创建矩阵,您还需要从 UP 和 FORWARD 向量创建一个“左”(或右)向量。一个很好的介绍在这里- 请注意,该示例确实将旋转应用于相机矩阵,这是一个完全可选的步骤。
维基百科对万向节锁有很好的解释。
在使用矩阵方法生成旋转矩阵(X、Y、Z)然后将它们相乘得到最终的旋转矩阵时,您会遇到万向锁问题。如果我理解你会,你使用 OUT 向量来获取角度(α,β,γ),然后你正在计算矩阵,最后 - 你将它们相乘以获得最终的旋转矩阵 - 然后是的,你会遇到万向节锁定。
摆脱这个问题的一种方法是使用四元数进行计算。
另外,在这里我找到了一些关于如何实现这些的 OpenGL 教程。