《游戏引擎架构》阅读笔记 第一部分第4章

  3.2 游戏引擎技术
  • 本系列博客为《游戏引擎架构》一书的阅读笔记,旨在精炼相关内容知识点,记录笔记,以及根据目前(2022年)的行业技术制作相关补充总结。
  • 本书籍无硬性阅读门槛,但推荐拥有一定线性代数,高等数学以及编程基础,最好为制作过完整的小型游戏demo再来阅读。
  • 本系列博客会记录知识点在书中出现的具体位置。并约定(Pa b),其中a为书籍中的页数,b为从上往下数的段落号,如有lastb字样则为从下往上数第b段。
  • 本系列博客会约定用【】来区别本人所书写的与书中观点不一致或者未提及的观点,该部分观点受限于个人以及当前时代的视角所限,请谨慎阅读。
  • 再次重申,请支持正版。

第4章 游戏所需的三维数学

4.1 在二维中解决三维问题

  • P125 last2

4.2 点和矢量

  • 点和笛卡尔坐标,左右手坐标系,矢量,矢量运算,点和矢量的线性插值(P126-138)
  • 用点积来判断方向(P134 last)

4.3 矩阵

  • 矩阵便于表示线性变换:平移、旋转、缩放等。(P139 1)
  • 矩阵乘法可以计算点和矢量的缩放、旋转等变换。(P139 last2)
  • 齐次坐标进行位移等计算。(P142 4)
  • 基础变换矩阵:平移(P144 last2)、旋转(P145 1)缩放(P146 2)
  • 坐标空间:模型空间(P417 last2)、世界空间(P149 1)、观察空间(P150 1)
  • 基的变换:把物体的位置、定向和缩放从某个坐标系转换至另一个坐标系。构建改变基的矩阵(P151 2)

4.4 四元数

  • 四元数作用:简化运算
  • 四元数视为三维旋转(P156 last)
  • 四元数旋转矢量(P159 1)

4.5 比较各种旋转表达方式

  • 欧拉角:由3个标量组成:偏航角、俯仰角、滚动角。优点:简单小巧直观。缺点:任意方向轴旋转不能轻易插值,优万向节死锁情况,绕轴旋转先后次序对结果有差别,对于要旋转的物体依赖从轴和方向的映射,没有额外信息就无法得知对应哪个轴的旋转(P164 last2)
  • 3X3矩阵:优点:独一无二地表达任意旋转,旋转可通过矩阵乘法直接计算。缺点:不直观,存储空间大。(P165 4)
  • 轴角:以一个单位矢量定义的旋转轴,再加上一个标量定义的旋转角。优点:直观,紧凑节省空间。缺点:不能简单地进行插值,轴角形式旋转不能直接施加于点或矢量,必须先转换为矩阵或四元数。(P165 last2)
  • 四元数:和轴角相似,区别在于旋转轴矢量的长度为旋转半角的正弦,并且其第4分量不是旋转角而是旋转半角的余弦。好处:能串接旋转,并直接施加于点和矢量。可以进行旋转插值。只需要存储4个浮点数。
  • SQT变换:四元数结合平移矢量和缩放因子。SQT变换广泛地应用在计算机动画中,因为其体积较小(统一缩放需要8个浮点数,非统一需要10个,相对4×3矩阵则需要12个),并且SQT变换容易插值。插值时,平移矢量和缩放因子采用LERP,四元数则可使用LERP或SLERP。(P166 last2)
  • 对偶四元数:对偶四元数四个分量为对偶数。(P167 1)
  • 旋转和自由度(P167 4)

4.6 其他数学对象

  • 直线,射线,线段
  • 球体
  • 平面:点法式
  • 轴对齐包围盒:AABB;定向包围盒:OBB(P171)
  • 平截头体:(P171 last)
图片 - 《游戏引擎架构》阅读笔记 第一部分第4章
  • 凸多面体区域

4.7 硬件加速的SIMD运算

  • 1994年,英特尔(Intel)首次把多媒体扩展(multimedia extension,MMX)指令集进奔腾CPU产品线中。把多个8/16/32位整数载入特设的64位MMX寄存器后,MMX指令就能对那些寄存器进行SIMD运算。英特尔陆续加入多个版本的扩展指令集,称为单指令数据流扩展(streaming SIMD extensions,SSE),其中第一个SSE版本出现于奔腾III处器。SSE指令采用128位寄存器,可储存整数或IEEE浮点数。
  • 游戏引擎中最常用的SSE模式为32位浮点数打包模式(packed 32-bit floating-pointmode)。此模式中,4个32位float值被打包进单个128位寄存器,单个指令可对4对浮点数进行并行运算,如加法或乘法。当要计算四元素矢量和4×4矩阵相乘,这个模式正合我们所需!(P173)
  • SSE寄存器(P173)
  • _m128数据类型:此数据类型可以声明全局变量、自动变量和类或结构体的成员变量。大多数情况下,此数据类型的变量会存储于内存中,但在计算之时_m128的值会直接在CPU的SSE寄存器中运用43。(P175 last)

4.8 产生随机数

  • 线性同余产生器:LCG并不能产生特别高质量的伪随机序列。若给定相同的初始种子值,则产生的序列会完全相同。LCG产生的序列并不符合一些广泛接受的准则,比如长周期、高低位有接近的长周期、产生的值在序列上和空间上都无关联性。(P180 2)
  • 梅森旋转算法:有庞大周期(4.3×10^6001),高阶的均匀分布维度,生成快速。

LEAVE A COMMENT