Unity Shader入门(五)矩阵的基础概念

Unity Shader入门(五)矩阵的基础概念

文章内容来自参考图书《Unity Shader入门精要》

在三维数学中,矩阵是最为重要的数学概念之一,在整个线性代数的数学世界当中都举足轻重的角色。

一、定义

由m * n 个数a ij 排成的m行n列的数表称为m行n列的矩阵,简称m * n矩阵(matrix)。
矩阵的形式(来源于百度百科)

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

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

行是竖直的,从左往右排列,在同一竖行中,m值都是相同的,越靠右的行m值越大。列是横平的,从上往下排列,在同一横列中,n的值是相同的,越靠下的列n值越大。

二、和矢量的关系

矩阵可以看作是一个数组,而矢量也是一个数组,因此,我们可以用矩阵来表示矢量。

矢量可以看作是n * 1 的列矩阵(column matrix),或者是1 * n 的行矩阵(row matrix),其中n是矢量的维度,例如一个三维矩中的n的值就是3 。

当我们把矢量当成是一个矩阵之后,就可以把矢量用来参与矩阵运算,这在空间变换中非常有用。

三、矩阵的运算

  1. 矩阵的加减法

只有同型矩阵之间才可以进行加减法

图片来源于百度百科

2.矩阵和标量的乘法

矩阵和标量相乘就是矩阵的每个元素和该标量相乘。

在这里插入图片描述

矩阵和标量相乘的结果任然是一个相同维度的矩阵。

3.矩阵和矩阵的乘法

两个矩阵的乘法仅仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。

一个m * n的矩阵A和一个 n * p 的矩阵B相乘,AB相乘的结果矩阵C将会是一个m * p 大小的矩阵。

对于C中的一个元素C ij 的值为:

图片来源于百度百科

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

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

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

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

矩阵乘法不满足交换律。

四、特殊的矩阵

  1. 方块矩阵

方块矩阵(square matrix)简称方阵,指的是行数和列数相等的矩阵。三维渲染中最常用的就是3 * 3 和4 * 4矩阵。

对角元素(diagonal elements)指的是行号和列号相等的元素,例如m11、m22等。如果一个矩阵除了对角元素外所有元素都是0,那么这个矩阵就叫做对角矩阵(diagonal matrix)。

  1. 单位矩阵(identity matrix)

单位矩阵是一个特殊的对角矩阵,这个对角矩阵的对角元素的值全都是1,这个矩阵用I n 来表示。如:

在这里插入图片描述

任何矩阵和单位矩阵相乘的结果都还是原来的矩阵。

  1. 转置矩阵(transposed matrix)

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

在这里插入图片描述

例如:

图片来源于百度百科

转置矩阵有如下性质:

(1)矩阵转置的转置等于原矩阵

图片来源于百度百科

(2)矩阵相乘的转置,等于反向相乘各个矩阵的转置

图片来源于百度百科

  1. 逆矩阵(inverse matrix)

必须是一个方阵才能进行逆矩阵操作。

给定一个方阵M,它的逆矩阵用M-1来表示。

如果把M和M-1相乘,它们的结果是一个单位矩阵。

在这里插入图片描述

如果一个方阵有对应的逆矩阵,我们就称这个方阵为可逆的(invertible),如果没有的话,就是不可逆的。

逆矩阵有如下性质:

(1)逆矩阵的逆矩阵是原矩阵本身。

(M-1)-1= M
在这里插入图片描述

(2)单位矩阵的逆矩阵是它本身

I -1 = I
在这里插入图片描述

(3)转置矩阵的逆矩阵是逆矩阵的转置

(M T)-1= (M-1)T
在这里插入图片描述

(4)矩阵相乘后的逆矩阵等于反向相乘各个矩阵的逆矩阵

(A B)-1 = B-1 A-1
在这里插入图片描述

逆矩阵在空间变换中有非常重要的地位。一个矩阵进行变换之后,逆矩阵允许我们还原这个变换,或者说计算这个变换的反向变换。

  1. 正交矩阵(orthogonal matrix)

如果一个方阵M和它的转置矩阵的乘积是单位矩阵的话,我们就说这个矩阵是正交的。因此有如下公式:

MMT = MTM = I

如果一个矩阵是正交的,那么它的转置矩阵和逆矩阵是一样的。因此:

MT = M-1

在三维变换中我们经常需要使用逆矩阵来求解反向的变换,但是逆矩阵运算计算量太大,为了提高性能而不可以使用逆矩阵运算。

又因为正交矩阵的转置矩阵和逆矩阵是一样的,而转置矩阵运算很快。

所以我们只要知道一个矩阵是否为正交矩阵,就可以通过转置运算得到它的逆矩阵。

五、在Unity中,常规的做法是把矢量放在矩阵的右侧,即把矢量转换成列矩阵来进行运算。

参考图书《Unity Shader入门精要》

部分公式来源于百度百科

发布了1 篇原创文章 · 获赞 0 · 访问量 2
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览