概念页
欧拉角与万向节锁
Euler Angles & Gimbal Lock
欧拉变换用 head(yaw)、pitch、roll 三个角度构造朝向矩阵,直观、易于用日常语言讨论,适合小角度调整和观察者朝向。但它依赖旋转顺序,两组欧拉角难以组合和插值,并且会出现万向节锁,因此更复杂的朝向处理需要四元数。
欧拉变换
默认观察方向沿 ,头部朝 :
- head 改变像摇头"不",pitch 像点头,roll 像歪头。head 在飞行模拟里也叫 yaw。
- 矩阵顺序有 24 种选法,书中用的是常见的一种。 是旋转的连乘,所以正交,逆为 。
- 这些旋转可以相对世界轴,也可以相对局部坐标系。
- 建模系统常用 x/y/z 顺序,动画中也用 z/x/y,动画与物理中用 z/x/z。z/x/z 的优点是只有绕 x 转半圈()时才会锁。**没有能完全避免万向节锁的顺序。**动画师偏爱用曲线编辑器编辑角度随时间的变化,所以欧拉角仍被广泛使用。(RTR4 4.2.2)
从矩阵提取欧拉角
展开 可得 ,,,于是:
- 特殊情况 :即万向节锁, 与 绕同一根轴旋转,只需求一个角。任取 ,则 。
- 把 限制在 ,若原矩阵的 超出此范围就无法还原原参数;多组参数可能对应同一个变换。
- 这种简单方法有数值不稳定问题,可以用更慢的方法避免。
万向节锁
- 旋转使某个自由度丢失。例如顺序为 x/y/z 时,第二步绕 y 转 会让局部 z 轴与原 x 轴对齐,最后的 z 旋转变得多余。
- 数学上: 时矩阵只依赖一个角 或 (不能同时两者)。
中间轴转到 时,第一轴与第三轴在空间中重合,两个自由度塌成一个,这就是万向节锁。
flowchart TD G0["三轴万向节:外环 / 中环 / 内环"] --> Pitch["中间轴转到 ±90°"] Pitch --> Align["内环轴与外环轴空间重合"] Align --> Lost["两轴转动效果相同:丢失 1 个自由度"] Lost --> Lock["万向节锁:只剩 r±h 一个有效角"]
其他局限
- 两组欧拉角难以组合;插值并非逐角度插值那么简单。甚至两组不同的欧拉角可能表示同一朝向,此时正确的插值应该完全不旋转。
- 这些是改用四元数的理由。
应用:约束变换
书中例子:虚拟扳手只能绕 x 轴转动,但输入设备给出的是任意旋转矩阵 。做法是从 中提取欧拉角,只用 重新构造 作为扳手的变换。
GEA 的视角(卷 I 5.3.11.1、5.5.1)
- 用物体自身的轴定义角度:GEA 指出 pitch/yaw/roll 无法用任意朝向的 定义,而要用模型空间的自然轴 :pitch 绕左/右轴,yaw 绕上轴,roll 绕前轴(见 坐标空间)。这与上文 RTR4 的 head(yaw)/pitch/roll 定义一致,只是 RTR4 直接绑定到「沿 −z 看、y 朝上」的默认朝向。
- 优点:简单、只需 3 个浮点数、直观;绕单一轴的旋转很容易插值(如在两个偏航角之间直接 lerp )。但绕任意轴的旋转无法简单插值。
- 万向节锁:GEA 的例子是绕 x 轴转 90° 后 y 轴「塌缩」到 z 轴上,之后绕原 y 轴的旋转与绕 z 轴等价,失去一个自由度。
- 旋转顺序:PYR、YPR、RYP 等每种顺序可能得到不同的复合旋转;各学科没有统一标准(个别学科有自己的约定),所以 三个数不足以唯一确定旋转,必须同时知道顺序。RTR4 给出 24 种顺序的说法,两书一致。
- 依赖轴映射:yaw 总是绕 up 轴,但没有额外信息就不知道 up 是 x、y 还是 z。
- 与其他表示的比较见 旋转表示的比较。
出处
- realtime_rendering_4ed.pdf 第 4 章 Transforms
- Game_Engine_Architecture_4Ed_-_Jason_Gregory.pdf
- Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 I 第 5 章 5.3.11.1、5.5.1 节
相关页面
游戏数学基本仿射变换Basic Affine Transforms平移、旋转、缩放、切变是摆放和变形物体的基础矩阵;它们的连乘顺序有关、但满足结合律。刚体变换的逆可以直接写出,法线要用伴随矩阵的转置(传统说法是逆转置)变换。理解这些矩阵的性质能写出更快、更正确的变换代码。游戏数学四元数Quaternion单位四元数可以紧凑地表示任意三维旋转,与轴-角表示互相转换很简单,并能做稳定、匀速的朝向插值(slerp),这些都是欧拉角做不好的。它可以高效地转换为矩阵以便与其他变换合并。游戏数学齐次坐标与矩阵约定Homogeneous Coordinates & Matrix Conventions实时渲染用 4×4 矩阵和四元素齐次坐标统一表示点和方向:方向向量 w=0,点 w=1。这样线性变换与平移可以合成为仿射变换并连乘。RTR4 采用列向量记法、右手观察坐标系;DirectX 采用行向量记法,书中强调这只是记法差异。图形学VR 与 AR 显示基础VR & AR Display Fundamentals虚拟现实 (VR) 完全替换用户所见的世界,增强现实 (AR) 把合成物体融入真实世界,二者常合称 XR。本页介绍与渲染相关的硬件与物理要素:追踪与显示设备、"动作到光子"延迟及其导致的模拟器晕动症、姿态预测、镜头光学畸变与色差的软件补偿、滚动与全局显示,以及立体视觉中的辐辏-调节冲突与瞳距。这些约束决定了 VR 渲染为何必须高帧率、低延迟并严格依赖厂商 SDK。图形学坐标空间Coordinate Spaces顶点从模型到屏幕要依次经过模型空间、世界空间、观察空间、裁剪空间、标准化设备坐标 (NDC)、窗口坐标。每一步变换都有明确目的,大部分可以用 4×4 矩阵表示并相乘合并。游戏数学旋转表示的比较Comparison of Rotational Representations旋转可以用欧拉角、3×3 矩阵、轴角、四元数表示,再加上平移与缩放就有 4×4(或 4×3)矩阵与 SRT(SQT)变换;更进一步还有对偶四元数。没有一种在所有场合都最好。GEA 按大小、直观性、能否直接作用于向量、能否插值、有无万向节锁比较它们,并用「参数个数 − 约束个数 = 3 个自由度」统一解释为什么它们用的浮点数不同。游戏开发刚体动力学Rigid Body Dynamics游戏物理引擎关心的是动力学:力如何影响运动。它做了两个简化:经典(牛顿)力学(无量子、无相对论效应)和刚体(形状不变)。无约束刚体有 6 个自由度,其运动可以分成互相独立的线性动力学(质心像质点一样平动)和角动力学(绕质心转动)。线性部分是 F=ma 的常微分方程;三维角动力学则以角动量为主变量,并用一个四元数形式的微分方程更新朝向(GEA4 卷 II 14.4)。