观前提示:本文章是个人笔记,只是给自己看的,我自己看得懂就行。
目录
矩阵基础
矩阵定义![](https://img-blog.csdnimg.cn/eba7367c11444ee2a47a6fcc2c814365.webp)
这m×n 个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列,称为矩阵A的(i,j)元,以数 aij为(i,j)元的矩阵可记为(aij)或(aij)m × n,m×n矩阵A也记作Amn。
矩阵转置
设A为m×n阶矩阵(即m行n列),第i 行j 列的元素是a(i,j),即:
把m×n矩阵A的行换成同序数的列得到一个n×m矩阵,此矩阵叫做A的转置矩阵:
对一个矩阵进行转置的转置,结果是原矩阵:
矩阵加法的转置,等于矩阵转置的加法:
矩阵乘积的转置,等于逆序的矩阵转置的乘积:
可以扩展到2个以上的矩阵:
矩阵乘法
矩阵的数乘
用一个数k乘矩阵A=(aij)m×n的所有元素得到的矩阵(kaij)m×n称为矩阵的数乘,记为kA或者Ak,即kA=Ak=(kaij)m×n。
矩阵和矩阵相乘的定义
设A为m*p的矩阵,B为p*n的矩阵,那么称m*n的矩阵C为矩阵A与B的乘积,记作C=AB,其中矩阵C中的第i行第j列元素可以表示为:
示例:
注意事项
1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
基本性质
1、乘法结合律: (AB)C=A(BC)
2、乘法左分配律:(A+B)C=AC+BC
3、乘法右分配律:C(A+B)=CA+CB
3、对数乘的结合性k(AB)=(kA)B=A(kB)
4、对数乘的结合性k(AB)=(kA)B=A(kB)
5、转置 (AB)T=BTAT
6、矩阵乘法在以下情况下满足交换律:
AA*=A*A,A和伴随矩阵相乘满足交换律
特殊矩阵
对角矩阵
非对角线元素的值为0,对角线元素是任意值的方阵。
例:
数量矩阵
主对角线元素全都相等,其余元素全都为零的矩阵。
例:
数量矩阵将主对角线元素提到外面后,矩阵将变成一个单位阵。
三角矩阵
上三角矩阵
主对角线以下元素全为零的矩阵。
例:
下三角矩阵
主对角线以上元素全为零的矩阵。
例:
单位矩阵
在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的1,这种矩阵被称为单位矩阵。它是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为1。除此以外全都为0。单位矩阵右一个重要的特性,任何矩阵与单位矩阵相乘都等于本身。
例:
逆矩阵
定义
设A是一个n阶方阵,若存在另一个n阶方阵B,使得:AB=BA=E,则称A方阵可逆,并称方阵B是A的逆矩阵。
若矩阵A是可逆的,则A的逆矩阵是唯一的,并记作A的逆矩阵为。
可逆矩阵的特点
1、可逆矩阵是行列式不为0的方阵
2、行列式不等于0的方阵一定可逆
伴随矩阵
由A的代数余子式构成的方阵再转置:
伴随矩阵发求逆矩阵
计算公式:逆矩阵 = 标准伴随矩阵 / 行列式
矩阵在Shader中的应用
矩阵变换
变换(transform):指的是我们把一些数据,如点,方向向量甚至是颜色,通过矩阵运算,进行转换的过程。经过矩阵乘法后,我们可以理解为矩阵对数据进行了变换操作。
变换类型
线性变换
保留矢量加和标量乘的计算,包含旋转、缩放、镜像和投影,可以使用3x3矩阵表示。
例:f(x) + f(y) = f(x + y),kf(x) = f(kx)
非线性变换
平移,可以使用4x4矩阵表示。
仿射变换
仿射变换就是合并线性变换与平移变换的变换类型,仿射变换可以使用一个4x4的矩阵表示。所以需要将矢量扩展到四维空间下,这就是齐次坐标空间,变换矩阵称为齐次矩阵。
点的列矩阵w分量补1,因为点会受到平移变化的影响。方向矢量列矩阵的w分量补0,因为平移不会影响到方向向量的方向。
平移矩阵
缩放矩阵
旋转矩阵
绕X轴,旋转θ角度:
绕Y轴,旋转θ角度
绕Z轴,旋转θ角度
复合变换
一个点P(1,1,1),需要做绕Z轴旋转30度,平移(5,4,2),缩放(3,2,1)复合变换,是存在顺序的,因为矩阵乘运算,不满足乘法交换律。
复合变换的顺序,决定了变换矩阵相乘的顺序,根据需求
因为矩阵满足结合律,所以可以得出变换矩阵为
Unity坐标空间
模型空间:模型内部点的位置都存储在模型文件内,所以点都是相对于模型空间的。
世界空间:模型在游戏运行时,需要加载到场景中,所以点存储在世界空间中。
观察(摄像机)空间:物体是否被投射到屏幕中,是由相机控制的,相机相对于物体的位置,决定了显示效果。
裁剪空间:需要判定点,是否存在于摄相机裁剪视椎体下,如果存在于视椎体内,则点可以进行显示。
屏幕空间:最终显示的设备为显示器,所以需要将点投影到显示器上,算出屏幕坐标点,由显示器显示。
Unity着色器中常见矩阵
UNITY_MATRIX_MVP:将点从模型空间下,转换到裁剪空间下
UNITY_MATRIX_M:将点从模型空间下,转换到世界空间下
UNITY_MATRIX_V:将点从世界空间下,转换到观察空间下
UNITY_MATRIX_P:将点从观察空间下,转换到裁剪空间下
_Object2World:将点从模型到世界空间转换(互为逆矩阵)
_World2Object:将点从世界空间到模型转换(互为逆矩阵)