为什么3D游戏相机会抖动?详解Gimbal Lock

当大家在玩3D自由视角的游戏时,如果你向上或者向下看,有时会出现相机突然向某个方向抽搐了一下的情况,这种现象在图形学中有个专有称谓,叫Gimbal Lock (万向节死锁,或叫 环向锁节)
参考视频:Euler (gimbal lock) Explained

首先,我们知道在三维坐标系下,相机可以沿着X, Y, Z三个轴转动,也就是传统的欧拉坐标系旋转。

如图,绿色代表Y轴转动轴,红色代表X轴转动轴,蓝色代表Z轴转动轴

然后,我们转一下Y轴,让箭头朝右

再转一下X轴,让箭头朝上

这时候你会发现Z轴和Y轴的转动轴重合了,你丧失了一个转动轴的自由度。
即:没有一个轴能让箭头直接转向你了。

我们找不到那个灰色的轴,能让箭头直接转向你!
但这并不意味着箭头不能转向你,只是我们需要多个轴同时转,才能让箭头朝向你

 

X, Y, Z轴同时转动,将箭头朝向你之后,我们发现它的转动轨迹实际上是那个黄色的线。
这个黄色的线并不是让箭头转向你的最短路径,相反,它很绕很扭曲。

这就是为什么3D视角下有时候会出现镜头抽搐的原因:
你想让相机向上看,但它会向左绕一下再朝上。

但有的读者可能会说,我从没遇到过这种情况!
是的,这种情况是可以避免的。
那么,如何解决Gimbal Lock?
答:再加一个维度,即4维的转动。
而这种4维的转动量,我们称其为四元数(Quaternion)

在目前主流的游戏引擎中,都提供了四元数的操作,而且也推荐制作者使用四元数来进行旋转。
四元数可以实现平滑插值,并避免Gimbal Lock,唯一的缺点就是大概有点难理解吧(苦笑
关于它的具体用法,大家可以参考这篇文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值