为什么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,唯一的缺点就是大概有点难理解吧(苦笑
关于它的具体用法,大家可以参考这篇文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言:今天学习一下向量吧~ 1.向量 (1)把预设体(红色箭头)拖入场景中,把它的Transform设为如图所示 ...
    Joe_Game阅读 715评论 0 0
  • sì 支zhī茶chá 对duì 酒jiǔ,赋fù 对duì 诗shī,燕yàn子zi 对duì 莺yīng 儿é...
    每个人的孟母堂阅读 1,283评论 0 6
  • 看了一下午锦绣未央的小说,连马原课都没去上,眼睛疼,也该找点事做了,毕竟抱着手机玩不是应该做的。。。
    黎安呐阅读 308评论 0 0
  • 我。女,专二要毕业,一段感情经历(在一起不到一个月以男方劈腿分手)21岁,处;男,本二,感情经历不知(应该挺多)2...
    何纯青阅读 167评论 0 0
  • 大部分的普通人,习惯了安稳、顺遂的日子,即使萌生了提升内在的想法,这个过程也会相当漫长。而在发生了一些变故,对自己...
    圆洲绿阅读 317评论 0 0