Unity Shader数学基础——矩阵

Unity Shader数学基础——矩阵

矩阵的定义

由m×n个数a,排成的m行n列的数表称为m行n列的矩阵,简称m×n矩阵。记作:

www.zeeklog.com  - Unity Shader数学基础——矩阵

这m×n个数称为矩阵A的元素,简称为元,数a位于矩阵A的第i行第j列,称为矩阵A的(i,j)元,以数a为(i,j)元的矩阵可记为(a)或(a)m×n,m×n矩阵A也记作Amn。

元素是实数的矩阵称为实矩阵,元素是复数的矩阵称为复矩阵。而行数与列数都等于n的矩阵称为n阶矩阵或n阶方阵。

矩阵基本运算

加法

www.zeeklog.com  - Unity Shader数学基础——矩阵

矩阵的加法满足下列运算律(A,B,C都是同型矩阵):

www.zeeklog.com  - Unity Shader数学基础——矩阵

应该注意的是只有同型矩阵之间才可以进行加法

减法

www.zeeklog.com  - Unity Shader数学基础——矩阵

数乘

www.zeeklog.com  - Unity Shader数学基础——矩阵

矩阵的数乘满足以下运算律:

www.zeeklog.com  - Unity Shader数学基础——矩阵

转置

把矩阵A的行和列互相交换所产生的矩阵称为A的转置矩阵(Aᵀ),这一过程称为矩阵的转置。

www.zeeklog.com  - Unity Shader数学基础——矩阵

性质一: 矩阵转置的转置等于原矩阵。(Mᵀ)ᵀ=M

性质二:矩阵串接的转置,等于反向串接各个矩阵的转置。(AB)ᵀ=BᵀAᵀ

矩阵乘法

两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。如A是m×n矩阵和B是n×p矩阵,它们的乘积C是一个m×p矩阵

www.zeeklog.com  - Unity Shader数学基础——矩阵

矩阵的乘法满足以下运算律:

结合律:(AB)C=A(BC)

左分配律:(A+B)C=AC+BC

右分配律:C(A+B)=CA+CB

矩阵乘法不满足交换律。

特殊矩阵

方块矩阵

方块矩阵简称方阵,是指那些行和列数目相等的矩阵。在三维渲染里最常用的就是3X3和4X4的方阵。

矩阵的一些运算和性质只有方阵才具有。例如,对角元素。方阵的对角元素指的是行号和列好相等的元素,把方阵看做一个正方形的话,那些元素排列在正方形的对角线上。如果一个矩阵除了对角元素外的所有元素都为0,那么这个矩阵就叫做对角矩阵。

www.zeeklog.com  - Unity Shader数学基础——矩阵

单位矩阵

一个特殊的对角矩阵是单位矩阵,用In来表示。

www.zeeklog.com  - Unity Shader数学基础——矩阵

逆矩阵

不是所有的矩阵都有逆矩阵,前提他必须是一个方阵。

给定一个方阵M,他的逆矩阵用M⁻¹来表示。逆矩阵最重要的性质就是,如果我们把M和M⁻¹相乘,那么他们的结果将会是一个单位矩阵。MM⁻¹=M⁻¹M=I;

性质一:逆矩阵的逆矩阵是原矩阵本身。

性质二:单位矩阵的逆矩阵是他本身。

性质三:转置矩阵的逆矩阵是逆矩阵的转置。(MT)⁻¹=(M⁻¹)T

性质四:矩阵串接相乘后的逆矩阵等于反向串接各个矩阵的逆矩阵。(AB)⁻¹=B⁻¹A⁻¹

正交矩阵

正交是矩阵的一种属性。如果一个方阵M和他的转置矩阵的乘积是单位矩阵的话,那我们就说这个矩阵是正交的。反过来也是成立的。MMᵀ=MᵀM=I。

矩阵的几何意义

在游戏世界中,变换一般包含旋转,缩放,平移。开发人员希望给定一个点或者矢量,再给定一个变换,就可以通过某个数学运算来求得新的点和矢量。

变换是指,我们把一些数据,如点,方向矢量甚至颜色等,通过某种方式进行转换的过程。在计算机图形学领域,变换非常重要。尽管通过变换我们能够进行的操作是有限的,但是这些操作已经足够奠定变换在图形学领域举足轻重的地位了。

线性变换。线性变换指的是那些可以保留矢量加和矢量乘的变换。缩放就是一种线性变换。旋转也是一种线性变换,如果我们要对一个三维矢量进行变换,那么仅用3X3的矩阵就可以表示所有的线性变换。

线性变换除了旋转和缩放以为,还包括错切,镜像,也被称为正交投影等。

但是一般的线性变换还是不够的,我们来考虑平移变换就不是一个线性变换。

这样我们就有了仿射变换。仿射变换就是合并线性变换和平移变换的变换类型,仿射变换可以用一个4X4的矩阵来表示,为此我们需要吧矢量扩展到四维空间下,这就是齐次坐标空间。

齐次坐标

由于3X3的矩阵不能代表平移操作,我们需要将其扩展到4X4的矩阵,为此,我们还需要把原来的三维矢量转换成四位矢量,也就是我们说的齐次坐标。

齐次坐标是一个四维矢量。

平移矩阵

www.zeeklog.com  - Unity Shader数学基础——矩阵

缩放矩阵

www.zeeklog.com  - Unity Shader数学基础——矩阵

旋转矩阵

www.zeeklog.com  - Unity Shader数学基础——矩阵

复合变换

www.zeeklog.com  - Unity Shader数学基础——矩阵