OpenGL 3D数学
1.标量与向量相乘
k * [x, y, z] = [x, y, z] * k = [kx, ky, kz]
2.向量与标量相除等于向量乘以标量的 1/k
[x, y, z] / k = [1/kx, 1/ky, 1/k*z]
结论:标量与向量相乘相除几何意义是对向量的放大缩小--缩放
3. 向量加减法
[x1, y1, z1] + [x2, y2, z2] = [x1+x2, y1+y2, z1+z2]
[x1, y1, z1] -[x2, y2, z2] = [x1-x2, y1-y2, z1-z2]
结论:向量与向量加减法的几何意义是--平移
结论:
1.向量不能与标量相加减,没有意义
2.向量不能与不同维度的向量相加减
4.向量点乘几何意义-获取角度
a.b可以通过公式计算两个向量之间的角度-点乘必须是单位向量
5.向量叉乘的几何意义-获取垂直与a和b的向量
ab指向该平面的正上方,垂直于a和b,ab的长度等于向量的大小与向量夹角sin值的积 ab = ||a||||b||*sin(ab夹角)
6. 单元矩阵
1.单元矩阵,行列相等,坐上到右下对角线位置为1,其余全是0
二维单元矩阵
1 0
0 1
三维单元矩阵
1 0 0
0 1 0
0 0 1
四维单元矩阵
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
结论
单元矩阵非常特殊,因为它是矩阵乘法单位元,其基本性质是用任意1个矩阵乘以单元矩阵,都将得到原矩阵。所以在某种意义上对矩阵的作用犹如1对标量的作用
7.方阵
行数和列数相同的矩阵,成为方阵,OpenGL里面主要讨论的范畴是 22 33 4*4方阵,单元矩阵是一种特殊的方阵
8.向量与矩阵
1.向量是特殊的矩阵,行向量x, y, z可以看做1行3列的矩阵,列向量x, y, z可以看做3行1列的矩阵
9.矩阵转置
行变列,列变行,转置的转置就是原矩阵
10.矩阵相乘
矩阵相乘规则,矩阵A * 矩阵B, A的列==B的行,的出来的矩阵是一个A行B列矩阵,每一个矩阵元素的值是有一定的运算规则
举例
A 3行4列 B 4行9列,A * B = 得出一个3行9列的矩阵
3行3列方阵3行3列方阵=得出相同3行3列方阵
3行8列 8行8列=3行8列
8行8列 *8行3列=8行3列
结论:
矩阵相乘的几何意义就是记录变化
矩阵乘法注意事项
1.任意矩阵M乘以方阵S,不管从哪边乘,都得到与原矩阵大小相同的矩阵,当然,前提是假定乘法有意义,当然,每个元素的值是按照一定规则计算的,如果S是单元矩阵,结果就是原矩阵M,每个元素的值保持不变
2.矩阵乘法不满足较好绿 AB=!BA
3.矩阵乘法满足结合律 即(AB)C=A(BC),假定ABC的维度使得其乘法有意义,要注意如果(AB)C有意义,那么A(BC)就一定有意义
4.矩阵乘法也满⾜与标量或向量的结合律,即:(kA)B = k(AB) = A(kB); (vA)B = v(AB);
5.矩阵积的转置相当于先转置矩阵然后以相反的顺序乘法,即:(AB)T = BT AT T是上标
向量与矩阵的乘法详解
⾏向量左乘矩阵时,结果是⾏向量;
列向量右乘矩阵时,结果是列向量;
⾏行向量右乘矩阵时,结果是⽆意义;
列向量左乘矩阵时,结果是⽆意义;
矩阵与向量相乘 注意事项:
1.结果向量中的每个元素都是原向量与矩阵中单独⾏或列的点积;
2.矩阵⼀向量乘法满⾜对向量加法的分配律,对于向量v,w 和 矩阵M 有,
(v + w)M = vM + wM;
11.行向量与列向量的使用场景
为什么要使⽤⾏向量?(偏向于书写方便)
1.在⽂字中使⽤⾏向量的形式更加好书写;
2.用矩阵乘法实现坐标系转换时,向量左乘矩阵的形式更加方便
3.DirectX使⽤的是⾏向量
为什么要使用列向量?
1.等式中使用列向量形式更好
2.线性代数书中使用列向量
3.多本计算机图形学都是使用的列向量
4.OpenGL 使⽤的是列向量
矩阵几何意义
12.平移、缩放、旋转
1.⽅阵的⾏能被解释为坐标系的基向量;
2.为了将向量从原坐标系变换到新坐标系,用它乘以一个矩阵。
3.从原坐标系到这些基向量定义的新坐标系的变化是⼀种线性变换。线性变换保持直线和平行线。但⻆度、⻓度 面积或体积可能会改变。
4.零向量乘以任何矩阵仍然得到零向量。因此,⽅阵所代表的线性变换的原点和原坐标系原点一致。变换不包含 原点。
5.可以通过想象变换后的坐标系的基向量来想象矩阵。这些基向量在2D中构成L形。在3D构成“三角架”型。⽤⼀ 个盒⼦以及辅助更有助于理解
12. 3D旋转 围绕X轴旋转-沿着x正向顺时针旋转
想让一个图形在3D中围绕X轴旋转∂度,可以将矩阵与下面这个矩阵相乘
1 0 0
0 cos∂ sin∂
0 -sin∂ cos∂
物体坐标系 x正向左,y正向上,z正向里
13. 3D旋转 围绕Y轴旋转-沿着Y正向顺时针旋转
想让一个图形在3D中围绕Y轴旋转∂度,可以将矩阵与下面这个矩阵相乘
cos∂ 0 -sin∂
0 1 0
sin∂ 0 cos∂
物体坐标系 x正向左,y正向上,z正向里
14. 3D旋转 围绕Z轴旋转-沿着Z正向顺时针旋转
想让一个图形在3D中围绕Z轴旋转∂度,可以将矩阵与下面这个矩阵相乘
cos∂ sin∂ 0
-sin∂ cos∂ 0
0 0 1
物体坐标系 x正向左,y正向上,z正向里
15. 3D旋转 围绕n轴旋转∂度
想让一个图形在3D中围绕n轴旋转∂度矩阵变换如下值
nx2(1-cos∂)+cos∂ nxny(1-con∂)+nzsin∂ nxnz(1-cos∂)-nySin∂
nxny(1-cos∂)-nzsin∂ ny2(1-con∂)+cos∂ nynz(1-cos∂)-nxSin∂
nxnz(1-cos∂)+nycos∂ nynz(1-con∂)+nxsin∂ nz2(1-cos∂)+cos∂
其中x,y,z为下标,2为上标