数学相关知识
在3D游戏引擎中会涉及到数学的相关知识,具体可以划分到线性代数:向量、矩阵、齐次坐标系、四元数。
向量
假设大家都已经对向量最基本的加法、减法、点乘、叉乘、单位化都是有了解的,简单介绍一下这些基础计算在游戏引擎中是如何应用的。
向量的加法
在最开始学向量的时候大家已经知道,向量的加法遵循三角形法则和平行四边形法则,在构建游戏世界的过程中用到了向量加法的几何意义。比如游戏中怪物追击玩家的AI中,怪物知道玩家的位置,需要时时刻刻朝向玩家移动,就会在每帧运用向量的加法向玩家移动。
向量的减法
向量的减法作为加法的你逆运算,集合意义也是可以用在方向的计算上,另外它还能判断两个物体之间的距离。比如游戏中怪物的追击机制有一个判断条件,那就是距离玩家大于一定的距离后才会进行追击,小于一定距离之后就不再朝向玩家移动,这是就用到了向量的减法。
向量的点乘
点乘主要用在了角度的计算和材质的渲染, 判断目标在自己的前后方位 。还是以怪物追击玩家为例子,刚刚只说了追击过程中的位置移动,但是怪物和玩家都是有正面朝向的,不然玩家看到怪物背对着玩家人物进行追击会觉得怪怪的,这时就需要怪物将自己的正面转向玩家。转的角度是多少呢?此时就需要用到向量的点乘进行计算了。 也能用来判断两个向量是否垂直、计算一个向量在另一个向量上的投影分量大小 。再说材质的光照渲染,通俗意义上讲就是光线照射后的明暗效果。现实世界中不规则的材质表面接受光线照射后是有不同的表现的,从数学的几何角度上来解释就是:在shader中,当材质表面的顶点法向量与光线向量的角度(即两个向量的点积)大于90度时就不接受光线的渲染,反之亦然。
向量的叉乘
1、叉乘可以用来判断两个向量是否平行或相交。返回值为0,则平行。
2、用于求平面法线(叉乘的几何意义:absinθ)
3、计算两个物体之间形成四边形的面积(|a||b|sinθ)
4、 判断目标在自己的左右方位
关于向量的点乘和叉乘容易混淆的问题,可以这么理解: 点乘判断角度,叉乘判断方向。
向量的单位化
向量的单位化计算的是物体间的距离,这个就不必多做介绍了。
矩阵
未完待续。。。