[入门] Unity Shader前置知识(2) —— 矩阵的运算

上一篇 Unity Shader前置知识(1) —— 矩阵基础

在编写Shader的过程中,我们常常要面对矩阵的一些运算,因此,了解矩阵的有关运算是非常重要的。

1. 矩阵转置

对矩阵进行转置运算实际是将其变为转置矩阵(transposed matrix)。给定一个 i × j 的矩阵 M ,它的转置可以表示成 M^{T},即这是一个 j × i 的矩阵。该运算非常简单,也就是将行变列,列变行。其对应数学公式是:

M_{ij}^{T}=M_{ji}

 例如:

\begin{bmatrix} 2 &3 \\ 8 & 22\\ 1 & 7 \end{bmatrix}^{T}=\begin{bmatrix} 2 &8 &1 \\ 3 &22 &7 \end{bmatrix}

对于行矩阵和列矩阵,我们也可以通过相同的方式来对它们进行相互转换。 

2. 矩阵乘法

2.1. 矩阵与标量的乘法

矩阵可以直接与一个值,也就是标量进行相乘,它的结果仍然是相同维度的矩阵。此处我们以一个 3 × 3 的矩阵为例,其公式如下:

Mk=kM=k\begin{bmatrix} m_{11} &m_{12} &m_{13} \\ m_{21} &m_{22} &m_{23} \\ m_{31} &m_{32} &m_{33} \end{bmatrix}=\begin{bmatrix} km_{11} &km_{12} &km_{13} \\ km_{21} &km_{22} &km_{23} \\ km_{31} &km_{32} &km_{33} \end{bmatrix}

 我们带入实际的数值来进行计算一下:

\begin{bmatrix} 4 &3 &1 \\ 6 &9 &7 \\ 5 &8 &2 \end{bmatrix}\times3=\begin{bmatrix} 12 &9 &3 \\ 18 &27 &21 \\ 15 &24 &6 \end{bmatrix}

 2.2. 矩阵与矩阵的乘法

并不是每个矩阵都能与另一个矩阵相乘,它们必须满足一个条件:乘号左边的矩阵列数 = 乘号右边的矩阵行数,它们相乘后会得到 左边矩阵的行数 × 右边矩阵的列数 的矩阵,即 M_{43}\times M_{35}=M_{45}。因为这个限制条件,导致矩阵相乘不满足交换律:

M1\times M2\ne M2\times M1

而是满足结合律:

(M1\times M2)\times M3=M1\times (M2\times M3)

 关于两个矩阵如何进行乘法计算,我们用一个图就能够很直观地表达出它们的计算方式:

 如上图所示,我们给定矩阵A、B,通过AB两矩阵相乘得出矩阵C,要计算矩阵C中的元素c_{23}时,先找到对应的行矩阵和列矩阵,即A矩阵中的第2行和B矩阵中的第3列,然后通过 c_{23}=a_{21}b_{13}+a_{22}b_{23} 来得出结果值。

2.3. 矩阵与向量的乘法

在上篇文章我们提到向量可以用行矩阵或列矩阵来表示,那么因此它也是可以与矩阵来进行乘法运算的,如行矩阵与矩阵相乘:

\begin{bmatrix} x &y &z \end{bmatrix}\times \begin{bmatrix} c_{11} &c_{12} &c_{13} \\ c_{21} &c_{22} &c_{23} \\ c_{31} &c_{32} &c_{33} \end{bmatrix}

以及列矩阵与矩阵相乘:

 \begin{bmatrix} c_{11} &c_{12} &c_{13} \\ c_{21} &c_{22} &c_{23} \\ c_{31} &c_{32} &c_{33} \end{bmatrix}\times\begin{bmatrix} x\\ y\\ z \end{bmatrix}

请注意,不同的计算顺序会产生不同的结果。

下一篇 Unity Shader前置知识(3) —— 特殊矩阵

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值