左手坐标系:DX、3DMax
右手坐标系:OpenGL
世界坐标系、物体坐标系、摄像机坐标系
向量和点在数学上是等价的,向量是有大小和方向的有向线段,向量没有位置,只有大小和方向
向量运算:
零向量:[ 0, 0, 0 ] 是唯一一个没有方向的向量
负向量:-[ x, y ] = [ -x, -y ]
向量大小、长度、模:模(x, y) = sqrt(x² + y²)
标量与向量的乘法:2 * [ x, y ] = [ 2x, 2y ]
单位向量(标准化向量): [ x, y ] / [ sqrt(x² + y²) ]
向量点乘:a * b = | a | | b | cosx [ x, y ] * [ a, b ] = xa + yb
点乘的作用判断物体在玩家前方还是后方
向量叉乘:[ x, y, z ] * [ a ,b, c ] = [ y1z2 - z1y2, z1x2 - x1z2, x1y2 - y1x2 ]
a x b = | a | | b | SIN = 垂直于a与b围成的平面的向量
叉乘的作用判断物体在玩家左侧还是右侧
叉乘还有一个作用是判断物体是否在某个图形内部还是外部,例如图上,P在AB左侧,P在BC左侧,P在AC左侧,即都去计算AP向量叉乘各个向量是否同为正或者同为负。
Shear矩阵
齐次坐标(用于平移计算):将二维转为三位,为什么向量的z轴为0,因为根据计算,防止向量的计算出来的z轴有变化,因为向量再怎么平移,它的方向都不会改变,为0那么计算出来的z轴就都为0,满足了方向不变的定理。
正好这样的定理也满足这样一个规则:
vector + vector = 它的z轴也为0,为0则为向量
point - point = 它的z轴为0,所以答案为向量
point + vector = 它的z轴为1,它为点
point + point = 它的z轴为2,正好点加点无意义
矩阵运算:
标量与矩阵的乘法:
kM = k * [m11, m12, m13] = [km11, km12, km13]
[m21, m22, m23] [km21, km22, km23]
[m31, m32, m33] [km31, km32, km33]
矩阵与矩阵的乘法
行对竖对应相乘相加
矩阵没有交换律,但是有结合律
矩阵和线性变换:
1、旋转
绕X轴进行旋转:
同理:
绕Y轴旋转:
[ COS, , -SIN ]
[ 0, 1, 0 ]
[ SIN, 0, COS ]
绕Z轴旋转:
[ COS, SIN, 0 ]
[ -SIN, COS, 0 ]
[ 0, 0, 1 ]
2、缩放
3、投影:
投影的本质就是从三维变成二维
以上为正交投影,将长方体变为长度为一的正方体,经过缩放和平移到原地处及完成正交投影
透视投影就是先将大的矩形压缩成小的矩形,最后再进行正交投影
二维Px投影到X轴,其他轴就为0,同理二维投影到Y轴,X轴就全为0
三位投影,投影到XY轴,Z轴就全为0,同理...
4、镜像:
矩阵的行列式:
矩阵只有在方阵中才具有行列式(方阵:行数和列数相同的矩阵)
矩阵的逆:
奇异矩阵的行列式为0,奇异矩阵为不可逆矩阵
矩阵的逆,就是A通过旋转矩阵M变为B,旋转B要变为A通过的旋转矩阵N,就是M的逆
正交矩阵:
逆矩阵和转置矩阵相同的就是为正交矩阵
4*4齐次矩阵:
用一个矩阵做变换 + 平移