Unity Shader数学基础——矩阵
矩阵的定义
由m×n个数a,排成的m行n列的数表称为m行n列的矩阵,简称m×n矩阵。记作:
这m×n个数称为矩阵A的元素,简称为元,数a位于矩阵A的第i行第j列,称为矩阵A的(i,j)元,以数a为(i,j)元的矩阵可记为(a)或(a)m×n,m×n矩阵A也记作Amn。
元素是实数的矩阵称为实矩阵,元素是复数的矩阵称为复矩阵。而行数与列数都等于n的矩阵称为n阶矩阵或n阶方阵。
矩阵基本运算
加法
矩阵的加法满足下列运算律(A,B,C都是同型矩阵):
应该注意的是只有同型矩阵之间才可以进行加法
减法
数乘
矩阵的数乘满足以下运算律:
转置
把矩阵A的行和列互相交换所产生的矩阵称为A的转置矩阵(Aᵀ),这一过程称为矩阵的转置。
性质一: 矩阵转置的转置等于原矩阵。(Mᵀ)ᵀ=M
性质二:矩阵串接的转置,等于反向串接各个矩阵的转置。(AB)ᵀ=BᵀAᵀ
矩阵乘法
两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。如A是m×n矩阵和B是n×p矩阵,它们的乘积C是一个m×p矩阵
矩阵的乘法满足以下运算律:
结合律:(AB)C=A(BC)
左分配律:(A+B)C=AC+BC
右分配律:C(A+B)=CA+CB
矩阵乘法不满足交换律。
特殊矩阵
方块矩阵
方块矩阵简称方阵,是指那些行和列数目相等的矩阵。在三维渲染里最常用的就是3X3和4X4的方阵。
矩阵的一些运算和性质只有方阵才具有。例如,对角元素。方阵的对角元素指的是行号和列好相等的元素,把方阵看做一个正方形的话,那些元素排列在正方形的对角线上。如果一个矩阵除了对角元素外的所有元素都为0,那么这个矩阵就叫做对角矩阵。
单位矩阵
一个特殊的对角矩阵是单位矩阵,用In来表示。
逆矩阵
不是所有的矩阵都有逆矩阵,前提他必须是一个方阵。
给定一个方阵M,他的逆矩阵用M⁻¹来表示。逆矩阵最重要的性质就是,如果我们把M和M⁻¹相乘,那么他们的结果将会是一个单位矩阵。MM⁻¹=M⁻¹M=I;
性质一:逆矩阵的逆矩阵是原矩阵本身。
性质二:单位矩阵的逆矩阵是他本身。
性质三:转置矩阵的逆矩阵是逆矩阵的转置。(MT)⁻¹=(M⁻¹)T
性质四:矩阵串接相乘后的逆矩阵等于反向串接各个矩阵的逆矩阵。(AB)⁻¹=B⁻¹A⁻¹
正交矩阵
正交是矩阵的一种属性。如果一个方阵M和他的转置矩阵的乘积是单位矩阵的话,那我们就说这个矩阵是正交的。反过来也是成立的。MMᵀ=MᵀM=I。
矩阵的几何意义
在游戏世界中,变换一般包含旋转,缩放,平移。开发人员希望给定一个点或者矢量,再给定一个变换,就可以通过某个数学运算来求得新的点和矢量。
变换是指,我们把一些数据,如点,方向矢量甚至颜色等,通过某种方式进行转换的过程。在计算机图形学领域,变换非常重要。尽管通过变换我们能够进行的操作是有限的,但是这些操作已经足够奠定变换在图形学领域举足轻重的地位了。
线性变换。线性变换指的是那些可以保留矢量加和矢量乘的变换。缩放就是一种线性变换。旋转也是一种线性变换,如果我们要对一个三维矢量进行变换,那么仅用3X3的矩阵就可以表示所有的线性变换。
线性变换除了旋转和缩放以为,还包括错切,镜像,也被称为正交投影等。
但是一般的线性变换还是不够的,我们来考虑平移变换就不是一个线性变换。
这样我们就有了仿射变换。仿射变换就是合并线性变换和平移变换的变换类型,仿射变换可以用一个4X4的矩阵来表示,为此我们需要吧矢量扩展到四维空间下,这就是齐次坐标空间。
齐次坐标
由于3X3的矩阵不能代表平移操作,我们需要将其扩展到4X4的矩阵,为此,我们还需要把原来的三维矢量转换成四位矢量,也就是我们说的齐次坐标。
齐次坐标是一个四维矢量。