【Unity Shader入门精要学习】数学基础(二)
矩阵(matrix)
一、矩阵相乘
一个最好记的方法就是,如A×B,A矩阵4×4,B矩阵4×3,则结果是一个4×3的矩阵,也就是新矩阵的行数由A决定,列数由B决定,所以可以用A的每一行去乘B的每一列,最终就是一个4×3的矩阵(其实就是每一行点乘每一列)
1、性质
(1)不满足交换律
通常情况下
A×B ≠ B×A
(2)满足结合律
(A×B)×C = A×(B×C)
二、特殊的矩阵
1、方块矩阵
方块矩阵(square matrix),简称方阵,是指那些行列数相等的矩阵,游戏中常用的就是3×3,4×4矩阵
2、对角矩阵
对角矩阵(diagonal matrix),是指除对角元素外其他位置都是0的方阵
3、单位矩阵
对角元素都是1的矩阵被称为单位矩阵(identity matrix)。
任何能与之相乘的矩阵都会得到原矩阵
image.png
4、转置矩阵
转置矩阵(transposed matrix),实际上是对矩阵的一种运算名叫做转置运算
性质
(1)矩阵转置的转置等于原矩阵
image.png
(2)矩阵相乘的转置,等于每个矩阵的转置反向相乘
image.png
5、逆矩阵
逆矩阵(inverse matrix),逆矩阵一定是个方阵,但是一个方阵不一定是逆矩阵,一个矩阵和它的逆矩阵相乘得到的是单位矩阵。
如果一个矩阵有对应的逆矩阵,我们就说这个矩阵是可逆的,或是非奇异的,如果一个矩阵没有逆矩阵,则说它是不可逆的,或是奇异的。
当一个矩阵的行列式(determinant)不为0,那么这个矩阵就是可逆的(参见矩阵的行列式)
性质
(1)逆矩阵的逆矩阵是原矩阵
image.png
(2)单位矩阵的逆矩阵是它本身
image.png
(3)转置矩阵的逆矩阵是逆矩阵的转置
image.png
(4)矩阵相乘的逆矩阵等于每个矩阵的逆矩阵反向相乘
image.png
几何意义
逆矩阵是对某种变换的反向操作,公式可看出
image.png
6、正交矩阵
正交矩阵(orthogonal matrix),是一种特殊的方阵,如果一个矩阵和它的转置相乘得到的是单位矩阵,那么我们就说这个矩阵是正交的(orthogonal),反过来依然成立。
而矩阵和它的逆矩阵相乘也得到的是单位矩阵,所以如果一个矩阵是正交的,那么他的逆矩阵就是它的转置。如果一个矩阵是正交矩阵,那么他的转置也会是正交矩阵。
如何判定一个矩阵是不是正交矩阵:
根据正交矩阵的定义得知矩阵的转置乘原矩阵得到的是单位矩阵:
注:c1,c2,c3其实是代表矩阵每一行或列,毕竟矩阵相乘其实完全可以看成是两个向量做的点乘操作
image.png
从而得知如下9个等式:
image.png
由此而知只需满足以下条件即为正交矩阵:
(1)矩阵的每一行(列)为单位矩阵,这样他们的点积才能为1
(2)矩阵的每一行(列)之间相互垂直,这样他们的点积才能为0(夹角为90度)
三、矩阵的几何意义
1、变换(transform)
(1)线性变化(linear transform)
线性变换是指那些可以保留矢量加和标量乘的变换:
image.png
如果对一个三维向量做线性变换,那么只需要一个3×3的矩阵就完全足够了
(2)仿射变换(affine transform)
仅仅有线性变换是不够的,还需要考虑平移变换,它不是线性变换,因为它满足标量乘,但不满足矢量加,所以需要引入仿射变换。放射变换就是合并线性变换和平移变换的变换类型,用一个4×4的矩阵表示,即把向量扩展到四维空间,也就是齐次坐标空间(homogeneouse space)。
常见的变换种类和它们的特性
2、齐次坐标(homogeneous coordinate)
因为3×3无法表示平移,所以增加了一个维度来表示平移,即齐次坐标。为每个矢量增加一项w分量:
(a,b,c,w)。对于一个点w=1,对于一个矢量w=0,这样在对点进行线性或非线性变换都会作用于这个点,如果是矢量,则平移不会起作用。
3、分解基础变换矩阵
分解后的矩阵格式(1)左上角的3×3的矩阵用于线性变换
(2)右上角的3×1的矩阵用于平移
(3)左下角的1×3矩阵是一个0矩阵(0,0,0)
(4)右下角是1
4、平移矩阵
点平移从上面的矩阵可看出,相当于在x,y,z方向上增加了tx,ty,tz的距离,即发生了平移。其实就是4×4的矩阵每一行组成的矢量与原矢量进行了的点乘操作:
(1,0,0,tx)·(x,y,z,1)=x+tx,其中w=1,即表示这是一个点,如果w=0则说明是一个矢量
矢量平移
我们可以法线如果是矢量平移,则并不会发生作用,这就是w的作用。
由此也可以看出平移矩阵并不是正交矩阵,因为它并不满足正交矩阵的两条要求。
平移矩阵的逆矩阵
5、缩放矩阵
点的缩放矢量缩放
缩放的逆矩阵
当缩放系数相等(kx=ky=kz)时,被称为统一缩放(uniform scale),如果系数不相等则则称为非统一缩放。统一缩放不会改变角度和比例信息,非统一缩放会改变与模型相关的角度和比例。
注:以上的矩阵变换只适用于沿坐标轴方向进行缩放,如果想沿任意方向进行缩放,需要进行复合变换,先把缩放轴换成标准的坐标轴,然后再沿标准坐标轴进行缩放
6、旋转矩阵
绕着空间X轴旋转绕着空间Y轴旋转
绕着空间Z轴旋转
旋转矩阵是正交矩阵,几个旋转矩阵串联同样也是正交的
7、复合变换
我们可以把平移、旋转、缩放组合起来,因为矩阵不满足交换律,所以乘法的顺序很重要,在大多数情况下我们约定变换顺序:先缩放,在旋转,最后平移。
变换的顺序不同会得到不同的变换结果,究其本质就是矩阵不满足交换律。