Gimbal Lock

  万向锁源于欧拉角的是有序处理的。U3D中的序列为: y->x->z。当旋转y时,local坐标系与世界坐标系重合,所以y等于永远按惯性坐标旋转。当x旋转+/-90时,local z将与惯性 y重合。

  这会导致两个问题:

  1)不同的 y,x,z 序列可能得到相同的结果。

  2)导致缺少一个自由度。原来通过local y可直接旋转到的角度,在缺少一个自由度的情况下,需要通过三个轴才通旋转过去,动画会形成畸形的轨迹。

     在游戏中,当角色旋转的动画触发时,角色就会做一系列连续的旋转变换,每一个变换都要用一组欧拉角来表示,但是不可能吧每一个方位的欧拉角都存储起来,因此动画师定义了一系列关键帧,指定关键帧处角色的方位(用一组欧拉角描述),然后计算机根据时间t对这几组欧拉角进行插值,得到一系列欧拉角。如果某个关键帧的pitch即绕第二个轴的旋转为90°,就会遇到万向锁,这时手机只能在水平面内旋转,如果动画师指定下一个关键帧手机的方位不是立起来的,没有任何问题,但如果指定的下一个关键帧的方位是立起来的,就会出现畸形轨迹。

参考:

1、https://www.bilibili.com/video/av8387812/

2、http://www.manew.com/blog-48527-3466.html

3、http://www.cnblogs.com/tclikang/archive/2012/11/09/2761988.html

Gimbal Lock的更多相关文章

  1. 使用四元数解决万向节锁(Gimbal Lock)问题

    问题 使用四元数可以解决万向节锁的问题,但是我在实际使用中出现问题:我设计了一个程序,显示一个三维物体,用户可以输入绕zyx三个轴进行旋转的指令,物体进行相应的转动. 由于用户输入的是绕三个轴旋转的角 ...

  2. 万向节锁(Gimbal Lock)的理解

    [TOC] 结论 我直接抛出结论: Gimbal Lock 产生的原因不是欧拉角也不是旋转顺序,而是我們的思维方式和程序的执行逻辑没有对应,也就是说是我们的观念导致这个情况的发生. 他人解释 首先我们 ...

  3. 万向节死锁 gimbal lock

    ,如下图一,把灰色箭头想象成是一架飞机,红,绿蓝三个圈看作是三个外围控制器,外圈带动所有里圈运动,里圈的运动不影响外圈. 1,首先,绕Y轴旋转(旋转绿圈),来确定前进的方向.这时红圈与蓝圈都跟着旋转. ...

  4. Gimbal Lock欧拉角死锁问题

    技术背景 在前面几篇跟SETTLE约束算法相关的文章(1, 2, 3)中,都涉及到了大量的向量旋转的问题--通过一个旋转矩阵,给定三个空间上的欧拉角\(\alpha, \beta, \gamma\), ...

  5. Unity3D 利用欧拉角实现实体的旋转

    本文系作者原创,转载请注明出处 刚刚入门U3D,也是很多东西搞不懂,最先接触的就是自己尝试去获取键盘上的GetPress之类的事件了吧 官方的API DOC也是帮了不少忙,到处吸收了各位博主的文章也是 ...

  6. OpenCASCADE View Manipulator

    OpenCASCADE View Manipulator eryar@163.com Abstract. When you finish modeling objects in the scene, ...

  7. Unity3D重要知识点

    数据结构和算法很重要!图形学也很重要!大的游戏公司很看重个人基础,综合能力小公司看你实际工作能力,看你的Demo. 1.什么是渲染管道? 是指在显示器上为了显示出图像而经过的一系列必要操作. 渲染管道 ...

  8. Unity3D 面试题汇总

    最先执行的方法是: 1.(激活时的初始化代码)Awake,2.Start.3.Update[FixUpdate.LateUpdate].4.(渲染模块)OnGUI.5.再向后,就是卸载模块(TearD ...

  9. 3D数学基础:3D游戏动画中欧拉角与万向锁的理解

    首先来看一下什么是欧拉角(Euler angles)?构件在三维空间中的有限转动,可依次用三个相对转角表示,即进动角.章动角和自旋角,这三个转角统称为欧拉角.——引自百度百科莱昂哈德·欧拉用欧拉角来描 ...

随机推荐

  1. python 搭建redis集群

    所需依赖 redis.io/download">redis-3.0.7ruby-1.8.7:sudo apt-get install rubyrubygems:sudo apt-get ...

  2. vnc操作指南

    启动 vncserver : vncserver : -geometry 1905x1005 停止: ps aux | grep vnc kill pid 或者 vncserver -

  3. 自动化脚本编写环境部署_win7(RF)

    第一步 安装Python并设置环境变量 1.安装python: python下载地址https://www.python.org/,建议用2.7.x版本 2.设置环境变量: 方法如下所示  第二步 安 ...

  4. 《算法》第五章部分程序 part 3

    ▶ 书中第五章部分程序,包括在加上自己补充的代码,字符串高位优先排序(美国国旗排序) ● 美国国旗排序 package package01; import edu.princeton.cs.algs4 ...

  5. spark读取文本数据测试

    已知文本有三列,整理数据,并导入mysql scala> import org.apache.spark.sql.SQLContextimport org.apache.spark.sql.SQ ...

  6. jquery源码'jQuery.fn.init.prototype'

    一般我们在创建构造函数即使用的时候会这样写,使用的时候会使用new 关键字,先实例化,然后使用. function test(name, age) { this.name = name; this.a ...

  7. QT中控制台程序运行问题

    环境: ubuntu14.04 问题与解决方法: QT中的控制他程序,默认运行方式是直接输出到Output窗口中来.我的程序需要从控制台输入,这时候默认的运行方式就不行了.通过设置工程全选项让它在终端 ...

  8. crontab 安装与配置

    安装方法: yum -y install vixie-cron yum -y install crontabs 说明:vixie-cron 软件包是 cron 的主程序:crontabs 软件包是用来 ...

  9. ORM 的基本操作

    https://www.cnblogs.com/sss4/p/7070942.html

  10. js -history.back(-1)和history.go(-1) 区别

    既然history.back(-1)和history.go(-1)都是返回之前页面,   history.back(-1)//直接返回当前页的上一页,,是个新页面   history.go(-1)// ...