首页 > 游戏引擎 阅读:823

游戏引擎开发涉及到的数学知识

数学可以说是引擎的根基,它的作用是不言而喻的。不但开发引擎需要数学知识,而且开发游戏逻辑也需要,所需知识基本覆盖了大学里与数学相关的所有课程——《高等数学》《线性代数》《概率与数理统计》。

很多人可以把这些课程学得很好,但能创造性地应用在游戏引擎中的人寥寥无几,能把论文中高深的技术在游戏中真正实现出来的人更是凤毛麟角。加入游戏引擎里的数学算法,大多是已经非常成熟的技术,并且已经被标准程序库化,会有效地使用它们其实已经足够。

另外,本教程提及的大部分数学知识是一些基础的数学知识,也是引擎中最常用到的。下面列出的都是我们需要掌握的基本内容。强烈推荐《3D数学基础:图形与游戏开发》这本书。

1. 向量

向量(也称矢量)是指具有大小(magnitude)和方向的量。这是图形学和物理学中经常用到的概念,希望读者能了解 2D、3D、4D 向量的含义,标量和点的含义。在游戏中,3D 向量既可以表示一个方向,也可以表示一个点。

读者还要了解向量之间的运算以及对应的含义,包括向量与标量的加减乘除、向量长度、向量点积、向量叉乘、向量单位化、向量加法、向量减法等。

2. 矩阵

矩阵也是图形学中最常用的概念,它的一个作用就是空间变换。对于没有学过线性代数的人来说,矩阵可能有些难以理解,不过也没关系,引擎中最常用的就是 3×3 矩阵和 4×4 矩阵。

不过这里还要了解关于矩阵的一些特性,包括矩阵的维度、矩阵的逆、矩阵的转置、单位矩阵、方阵、标量和矩阵相乘、矩阵和矩阵相乘、矩阵和向量相乘、向量和矩阵相乘(不同顺序得到的结果也不一样)、正交矩阵、向量与基向量的关系等。

3. 四元数

关于四元数,需要了解的包括四元数的定义以及四元数的模、单位四元数、四元数的逆、四元数的共轭、四元数的点乘和叉乘等,相关的内容在网上非常容易查到。

4. 几何体

引擎中的几何体基本是用来做碰撞检测和相交检测以及求相互距离的。所有的几何体都以参数化方式表示。

我们需要弄清楚的是直线、射线、线段、圆、三角形、矩形、平面、球体、立方体、胶囊体等。我们需要用到的是它们之间的相交检测以及点到它们的距离。

5. 欧拉角

欧拉角和坐标轴的指向没什么关系,它是按照方位来定义的,是以前向量(Roll)、右向量(Pitch)、上向量(Yaw)作为旋转轴得到的角度。按不同顺序旋转得到的结果是不一样的,一般有两种旋转顺序,分别为 Roll→Pitch→Yaw 和 Yaw→Pitch→Roll。

读者要深刻了解欧拉角、矩阵、四元数之间的相互转换关系。

1) 分别绕z轴、x轴、y轴旋转 AngleZ、AngleX、AngleY 角度的矩阵和构建欧拉角的矩阵一样。

Matrix(z Axis, AngleZ) * Matrix(x Axis, AngleX) * Matrix(y Axis, AngleY) = Matrix(Roll_AngleZ, Pitch_AngleX,Yaw_AngleY)


2) 分别绕z轴、x轴、y轴旋转 AngleZ、AngleX、AngleY 角度的四元数和构建欧拉角的四元数一样。

Quaternion(z Axis, AngleZ) * Quaternion (x Axis, AngleX) * Quaternion (y Axis, AngleY) = Quaternion(Roll_AngleZ, Pitch_AngleX,Yaw_AngleY)


3) 欧拉角到四元数和矩阵的转换并不一定可逆,前提是 AngleZ、AngleY 的范围是 [−π,π],AngleX 的范围是 [−π/2,π/2]。至于为什么是这样,这里不做过多解释,读者可以根据公式自己推导。

编程帮,一个分享编程知识的公众号。跟着站长一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

文章不深奥,不需要钻研,在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「编程帮」,你已然超越了90%的程序员!

编程帮二维码
微信扫描二维码关注

所有教程

优秀文章