点乘 Dot Product
点乘是两个向量的运算,结果为一个标量。
1 | A · B = |A||B|cosθ |
若 A B 都为单位向量,则结果就是 cosθ,根据cos性质:
1 | A Dot B > 0 则两向量夹角 < 90° |
由此, 游戏中可以用于:
判定角色前后关系(判断视角FOV)
1
playerA朝向为向前向量A,playerA指向playerB的方向的向量B,A Dot B 结果 > 0 或某个阈值, 则代表playerB 在 playerA 前方,或者说在可视范围内。
漫反射光照模型
1 | 用于计算物体表面每个像素点的漫反射。表面指向光源方向向量 L Dot 像素法线方向向量(垂直与表面) |
叉乘 Cross Product
叉乘是三维空间中两个向量的运算,结果是一个新向量,其方向垂直于输入的两个向量。
1 | A cross B = (AyBz - AzBy, AzBx - AxBz, AxBy - AyBx) |
模长为
1 | |A cross B| = |A||B|sinθ |
A cross B 垂直于 A 和 B,则可以计算A B 为边向量的三角面法向量。
判定左右,计算旋转
1
与Dot类似,根据sin性质,cross可用于判定左右,Dot用于判定前后
判定某点是否在某凸多边形内
1
与上面类似,只需与逐条边向量比较,都为同向即为在内部。