1 数学知识
1.1 坐标系
分为左手坐标系和右手坐标系两种,主要区别在于z轴的指向,z轴指向屏幕内的是左手坐标系,z轴指向屏幕外的右手坐标系。Unity
和Direct3D
使用的是左手坐标系,OpenGL
使用的右手坐标系。
法线和切线
与椭圆有且仅有一个交点的直线,叫做椭圆的切线。二者公共点,叫做切点。
经过切点且与切线垂直的直线,叫做该椭圆的法线。
1.2 三角学
- 整个圆周为360度( 2 π 2\pi 2π弧度),因此180度等于 π \pi π弧度,约57.296度等于1弧度。三角函数sin和cos的参数以弧度为单位,而不是度。
- 三角形的三个内角之和为180度( π \pi π弧度)。
- 正弦 s i n ( x ) sin(x) sin(x) = 对边/斜边 = y/r。定义域为 0 <= x <= 2 π 2\pi 2π,值域为-1到1。
- 余弦 c o s ( x ) cos(x) cos(x) = 邻边/斜边 = x/r。定义域为 0 <= x <= 2 π 2\pi 2π,值域为-1到1。
- 正切 t a n ( x ) tan(x) tan(x) = 对边/邻边 = y/x = 斜率 = M。定义域为 - π \pi π <= x <= 2 π 2\pi 2π,值域为负无穷大到正无穷大。
1.3 向量
向量表示的是一条从一个点到另一个点的有向线段。向量是所有3D引擎算法的基础。
向量长度
是从原点到向量表示的终点的距离,具体来说是各个分量平方和的平方根。公式如下
|u| = sqrt( u x 2 u_x^2 ux2 + u y 2 u_y^2 uy2 + u z 2 u_z^2 uz2)
归一化
归一化(normalize)就是使向量长度为1,同时方向保持不变。计算公式为向量除以其长度,如下
u ′ = u / ∣ u ∣ u' = u / |u| u′=u/∣u∣
顶点和向量的区别
顶点和向量都用一个三元组(x, y, z)表示。但顶点表示的是空间中的位置信息,在变换时可以被扩展为齐次坐标(x, y, z, w),这时w通常为1。而向量表示的是一个方向,即从原点到(x, y, z)的方向,没有位置属性,它的齐次坐标(x, y, z, w)中,w为0。
向量加法
向量加法是指两个向量的分量相加。几何学表示为以两个向量的边为平行四边形的长边对角线。在游戏中常用于寻找目标的逻辑,例如,玩家坐标是V0( x 0 x_0 x0, y 0 y_0 y0, z 0 z_0 z0),怪物坐标是V1( x 1 x_1 x1, y 1 y_1 y1, z 1 z_1 z1),为了让玩家自动向怪物移动,首先要确定移动方向,表示为dir=(V0-V1).Normalized
,因为方向没有大小,故进行单位化操作。接下来让玩家根据时间移动到怪物位置,表示为V=V0+dir*time
。这样就利用两个向量的加法实现了位置移动。
向量减法
向量减法和加法相反,是指两个向量的各个分量相减,几何学表示为以两个向量的边为平行四边形的短边对角线。主要应用在方向的计算,以及判断两个物体间的距离。
向量点积
点积将各个分量分别相乘后相加,得到一个标量,而不是保持向量形式。定义如下
u ⋅ v u \cdot v u⋅v = u x u_x ux