首先,作为一个游戏开发者为什么需要学习矩阵?因为在我们的游戏中矩阵可以实现对原来物体的缩放,平移,旋转的线性变换(计算机最快以及最高效的旋转为欧拉角),矩阵就是我们实现旋转的一种基本方式,在我们3D游戏开发中用得最多的为3X3的矩阵,可以完成对XYZ轴的旋转,而4X4的齐次矩阵则是在旋转的基础上增加了平移变换。
现在开始来介绍矩阵,我们之前知道向量相当于标量的数组,那矩阵就是向量的数组。
矩阵的类型:
方阵: 行数与列数相等的矩阵叫做方阵。
对角矩阵: 除对角线上以外的元素都为0的矩阵叫做方阵。
单位矩阵: 除对角线上以外的元素都为0,并且对角线上的元素都为1的矩阵叫做方阵。
向量以矩阵来表示:向量同时也可以作为矩阵使用,列向量相当于3x1的矩阵
矩阵的转置:矩阵的行和列的交换成为矩阵的转换。对角矩阵和单位矩阵的转置等于它本身(D)(矩阵的转置非常重要,因为之前提到4x4的齐次矩阵可以同时做到平移和旋转的变换。而齐次矩阵的性质就是它的逆等于它的转置,我们可以通过转置轻松的求得逆)
向量可以作为矩阵表示同样可以实现转置。
矩阵的相关公式。
标量与矩阵的乘法:标量与矩阵的乘法等于这个与矩阵中每个元素相乘
矩阵与矩阵相乘:矩阵与矩阵相乘需要遵循前一个矩阵的行数需要等于后一个矩阵的列数!(矩阵的乘法是不遵循乘法交换律的除非其中一个矩阵为单位矩阵)
第一个矩阵决定了最后得到矩阵的行数,第二个矩阵决定了列数
AB!=BA
矩阵的乘法公式:
单位矩阵的乘法:
矩阵的乘法结合律等:
向量与矩阵的乘法:(行向量与列向量分别与矩阵相乘结果是不同的)
-
行向量:
-
列向量:
从以上可以看出行向量与矩阵相乘需要左乘,列向量则需要右乘。
矩阵的几合解释:(0,1)和(1,0)两个向量通过矩阵乘法实现了旋转和大小的变换
实际上把这个平面上的点都进行了变换
可以发现需要对2D的物体实现缩放以及旋转变换我们使用2x2的矩阵就可以实现
那3D的呢? 我们就需要使用3x3的矩阵:
矩阵的编程实现:(相关运算符需要重载实现)
-
运算符的重载,矩阵乘法
- 矩阵的乘法,在源文件中实现。