zoukankan      html  css  js  c++  java
  • [UnityShader基础]11.矩阵

    0.特殊的矩阵

    a.单位矩阵

    类似于标量中的数字1,任何矩阵和单位矩阵相乘的结果还是原来的矩阵,。如下是一个三阶的单位矩阵:

    b.转置矩阵

    对一个矩阵的行列进行交换,可以得到转置矩阵

    c.逆矩阵

    对于一个方阵M,它的逆矩阵用M-1来表示,一个重要的性质是:M*M-1=单位矩阵

    逆矩阵是具有几何意义的,我们知道一个矩阵可以表示一个变换,而逆矩阵允许我们还原这个变换。因此,如果我们使用变换矩阵M对矢量v进行了一次变换,然后再使用它的逆矩阵M-1进行另一次变换,那么我们会得到原来的矢量

    证明为:M-1*(M*v)=(M-1*M)*v=v

    d.正交矩阵

    矩阵M是正交的,等价于:M*MT=单位矩阵

    结合上面的逆矩阵性质,可知对于正交矩阵M:MT=M-1

    1.矩阵和矩阵的乘法

    一个a*b的矩阵和一个b*c的矩阵相乘,结果为一个a*c的矩阵

    2.矩阵和矢量的乘法

    在unity中,通常会把矢量放在矩阵的右侧,即把矢量转换成列矩阵来进行运算。这是由unity提供的内置矩阵(如MVP矩阵)决定的,矢量放在左侧还是右侧,结果是不一样的

    例如,一个4*4的矩阵,乘以一个4*1的向量,结果为一个4*1的向量

    对于CBAv=(C(B(Av))),其中C、B、A为矩阵,v为向量,先对v使用A进行变换,再使用B进行变换,最后使用C进行变换

    3.几何意义

    a.变换

    矩阵的几何意义是变换,变换包含常见的平移变换、旋转变换、缩放变换,分别通过构造平移矩阵、旋转矩阵、缩放矩阵,然后乘以点或矢量,就可以对点或矢量进行对应的操作

    如果使用的是4*4的矩阵来进行变换,则需要把点或矢量扩展到四维空间,这就是齐次坐标空间

    b.齐次坐标

    齐次坐标是一个四维矢量

    对于一个点,从三维坐标转为齐次坐标,是把其w分量设为1

    对于一个矢量,从三维坐标转为齐次坐标,是把其w分量设为0

    这样的话,当用一个4*4的变换矩阵对一个点进行变换时,平移、旋转、缩放都会作用于该点;而如果是用于变换一个矢量,平移的效果就会被忽略

    旋转变换和缩放变换的矩阵是3*3的,平移变换的矩阵是4*4,点要考虑平移,而方向矢量不需要考虑平移,因此:

    对顶点的的变换,通常使用4*4的变换矩阵

    对方向矢量的的变换,通常使用3*3的变换矩阵

    4.CG中的矩阵

    a.初始化

    在CG中,对float4x4等类型的变量是按行优先的方式进行填充的,例如用1到9去填充一个3x3的矩阵,则得到的是:

    1 2 3

    4 5 6

    7 8 9

    b.访问

    访问一个矩阵中的元素时,也是按行来索引,例如定义上面的矩阵为M,则:

    M[1][0]表示访问第2行第1列的元素,即值为4

    c.mul方法

    如下,M为矩阵,v为矢量,tranpose方法表示对矩阵进行转置。可知当参数位置调转时,要对矩阵进行转置

    mul(M, v) == mul(v, tranpose(M))

    mul(v, M) == mul(tranpose(M), v)

  • 相关阅读:
    数组操作
    HTML CSS 笔记
    jacascript 滚动scroll
    SEO优化技巧
    STP选举规则和例题
    3.1GSM-R的网络组成
    光缆的型号
    光缆的种类
    fdisk命令分区过程
    文件系统管理--挂载光盘与U盘
  • 原文地址:https://www.cnblogs.com/lyh916/p/14232365.html
Copyright © 2011-2022 走看看