【1】线性代数
[1.1] 向量
向量相等
向量加法
向量与数量乘法
向量的数量积(点积):投影
向量的向量积(叉积):平面的方向向量
[1.2] 矩阵
矩阵加法
数与矩阵相乘
矩阵的乘法
矩阵的转置
逆矩阵
[1.3] 矩阵和向量在游戏中的应用
二维变换
三维变换:三维变换都可以统一表示成矩阵的形式。对空间中的某个点进行变换,也就是对这个点的向量和变换矩阵相乘,得到的结果就是变换后的点。由于矩阵相乘有结合律,所有的变换都可以在施加到向量之前进行相乘,得到一个单独的矩阵。这个矩阵包含了所有变换信息,大大提高了效率并简化了运算过程。
[1.4] 欧拉角
物体在三维空间的有限转动,可依次用三个相对转角表示,这三个转角统称为欧拉角。
欧拉角有多种表示方式,游戏引擎中最常用的可能是roll(横滚角)、pitch(俯仰角,也作tilt)、yaw(偏航角,也作pan),分别对应于右手笛卡尔坐标系的x、y和z轴的旋转。
欧拉角的万向节死锁(Gimbal Lock)会导致位置上连续变化 在数值表示上确是非连续的。给定的两个关键帧之间无法平滑过渡。
[1.5] 四元数
四元数是最简单的超复数,是由实数加上三个虚数单位i、j、k组成,而且它们有如下关系:i^2=j^2=k^2=ijk=-1。也可将四元数看成由实部和虚部组成。
四元数运算:
1.四元数的加法与减法
2.加法逆元素
3.四元数相乘
4.共轭四元数
5.单位四元数
6.四元数的逆(也称为倒数)
用四元数表示旋转:
轴-角对(n,Θ)定义了一个角位移:绕向量n所指定的轴旋转Θ角。
四元数可以被解释为角位移的轴-角对方式:q=[cos(Θ/2) sin(Θ/2)n]=……
使用四元数表示旋转的一个最大好处就是可以实现SLERP插值(球面线性插值),可以解决欧拉角表示旋转带来的万向节死锁问题。
[1.6]
旋转矩阵、欧拉角和四元数比较
它们都可以用来对一个点、向量或者物体完成旋转的操作,它们之间是可以互相转化的。
【2】几何
[2.1]直线方程
[2.2]平面方程
[2.3]点在三角形内部的判断:
检测是否共面;
判断待检测点是否位于三角形内部,有三种方法。
[2.4]直线与三角形相交检测
这是游戏引擎中常见的问题,最典型的应用就是拾取(Picking),即判断鼠点了三维场景中的哪个物体。
最常见的两种方法:
直接求解法,解方程求直线与三角形所在平面的交点,再判断交点是否在三角形内;
参数化求解法,过程略。
[2.5]曲线
常用的参数曲线有贝塞尔曲线和B样条曲线。
【3】数学在游戏引擎中的高级应用
本节我们主要讨论游戏引擎当中遇到的物理学问题,及其数学求解方法。
[3.1]速度的积分运算
[3.2]差分的应用
显式欧拉方法
隐式欧拉方法
龙格-库塔方法
[3.3]流体方程
由于计算量大,游戏应请中通常采用简单的粒子系统来表现流体。
随着硬件的发展,计算机的计算能力逐渐加强,特别是GPU的不断发展和一些新的流体仿真算法的出现,纳维-斯托克斯方程的求解是关键所在。目前主要有三类方法:欧拉网络;玻尔兹曼格子机;基于粒子的方法,如SPH(光滑粒子动力学)。这三类方法从本质上来说是一致的,只是原理有所不同,都可以推导出纳维-斯托克斯方程。
纳维-斯托克斯方程通常由两部分组成:
(1)质量方程(连续性方程),
(2)动量方程。
[3.4]有限元变形计算
模拟柔软的物体效果,这些物体在外力的作用下会变形。质量弹簧模型的计算速度较快,但精确度较差。使用有限元方法可以得到更为精确的软体变形,多用于工程计算中,在游戏的应用中很少见。