美文网首页UnityShader
【Unity Shader入门精要学习】数学基础(二)

【Unity Shader入门精要学习】数学基础(二)

作者: 小王子称号发放NPC | 来源:发表于2019-08-16 17:05 被阅读0次

    矩阵(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的方阵

    image.png

    3、单位矩阵

    对角元素都是1的矩阵被称为单位矩阵(identity matrix)

    image.png
    任何能与之相乘的矩阵都会得到原矩阵
    image.png

    4、转置矩阵

    转置矩阵(transposed matrix),实际上是对矩阵的一种运算名叫做转置运算

    image.png
    性质
    (1)矩阵转置的转置等于原矩阵
    image.png
    (2)矩阵相乘的转置,等于每个矩阵的转置反向相乘
    image.png

    5、逆矩阵

    逆矩阵(inverse matrix),逆矩阵一定是个方阵,但是一个方阵不一定是逆矩阵,一个矩阵和它的逆矩阵相乘得到的是单位矩阵。

    image.png
    如果一个矩阵有对应的逆矩阵,我们就说这个矩阵是可逆的,或是非奇异的,如果一个矩阵没有逆矩阵,则说它是不可逆的,或是奇异的
    当一个矩阵的行列式(determinant)不为0,那么这个矩阵就是可逆的(参见矩阵的行列式)
    性质
    (1)逆矩阵的逆矩阵是原矩阵
    image.png
    (2)单位矩阵的逆矩阵是它本身
    image.png
    (3)转置矩阵的逆矩阵是逆矩阵的转置
    image.png
    (4)矩阵相乘的逆矩阵等于每个矩阵的逆矩阵反向相乘
    image.png
    几何意义
    逆矩阵是对某种变换的反向操作,公式可看出
    image.png

    6、正交矩阵

    正交矩阵(orthogonal matrix),是一种特殊的方阵,如果一个矩阵和它的转置相乘得到的是单位矩阵,那么我们就说这个矩阵是正交的(orthogonal),反过来依然成立。

    image.png
    而矩阵和它的逆矩阵相乘也得到的是单位矩阵,所以如果一个矩阵是正交的,那么他的逆矩阵就是它的转置。如果一个矩阵是正交矩阵,那么他的转置也会是正交矩阵。
    如何判定一个矩阵是不是正交矩阵:
    根据正交矩阵的定义得知矩阵的转置乘原矩阵得到的是单位矩阵:
    注: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、复合变换

    我们可以把平移、旋转、缩放组合起来,因为矩阵不满足交换律,所以乘法的顺序很重要,在大多数情况下我们约定变换顺序:先缩放,在旋转,最后平移
    变换的顺序不同会得到不同的变换结果,究其本质就是矩阵不满足交换律。

    相关文章

      网友评论

        本文标题:【Unity Shader入门精要学习】数学基础(二)

        本文链接:https://www.haomeiwen.com/subject/pfkidctx.html