上一篇 Unity Shader前置知识(1) —— 矩阵基础
在编写Shader的过程中,我们常常要面对矩阵的一些运算,因此,了解矩阵的有关运算是非常重要的。
1. 矩阵转置
对矩阵进行转置运算实际是将其变为转置矩阵(transposed matrix)。给定一个 i × j 的矩阵 M ,它的转置可以表示成 ,即这是一个 j × i 的矩阵。该运算非常简单,也就是将行变列,列变行。其对应数学公式是:
例如:
对于行矩阵和列矩阵,我们也可以通过相同的方式来对它们进行相互转换。
2. 矩阵乘法
2.1. 矩阵与标量的乘法
矩阵可以直接与一个值,也就是标量进行相乘,它的结果仍然是相同维度的矩阵。此处我们以一个 3 × 3 的矩阵为例,其公式如下:
我们带入实际的数值来进行计算一下:
2.2. 矩阵与矩阵的乘法
并不是每个矩阵都能与另一个矩阵相乘,它们必须满足一个条件:乘号左边的矩阵列数 = 乘号右边的矩阵行数,它们相乘后会得到 左边矩阵的行数 × 右边矩阵的列数 的矩阵,即 。因为这个限制条件,导致矩阵相乘不满足交换律:
而是满足结合律:
关于两个矩阵如何进行乘法计算,我们用一个图就能够很直观地表达出它们的计算方式:
如上图所示,我们给定矩阵A、B,通过AB两矩阵相乘得出矩阵C,要计算矩阵C中的元素时,先找到对应的行矩阵和列矩阵,即A矩阵中的第2行和B矩阵中的第3列,然后通过
来得出结果值。
2.3. 矩阵与向量的乘法
在上篇文章我们提到向量可以用行矩阵或列矩阵来表示,那么因此它也是可以与矩阵来进行乘法运算的,如行矩阵与矩阵相乘:
以及列矩阵与矩阵相乘:
请注意,不同的计算顺序会产生不同的结果。