FeastSC 发表于 2022-1-5 18:58

《UnityShader入门精要》学习笔记——第四章(上):学习 ...

声明:

本文章的学习内容来源全部出自《UnityShader入门精要》——冯乐乐
该文章只是本人我的学习笔记,里面对《UnityShader入门精要》进行了些许概括且加了自己的些许理解
如果想更加具体地了解其内容,建议购买原著进行学习
<hr/>4.2笛卡尔坐标系

4.2.1二维笛卡尔坐标系



二维笛卡尔坐标系包含两部分信息:

[*]一个特殊的位置,即原点,它是整个坐标系的中心
[*]两条过原点的互相垂直的矢量,即x轴和y轴。这些坐标轴也被称为是该坐标系的基矢量
x,y轴不一定是图4.3中的指向,如OpenGL DirectX 使用了不同的二维笛卡儿坐标系


4.2.2三维笛卡尔坐标系



3个坐标轴称为该坐标系的基矢量
正交基:坐标系的坐标轴相互垂直
标准正交基:坐标系的坐标系相互垂直且长度为1
(如没特殊说明,接下来默认情况下使用的坐标轴值的都是标准正交基)

4.2.3 左手坐标系 和 右手坐标系

从某种意义上来说,所有的二维笛卡尔坐标系都是等价的(可以通过旋转和翻转实现重合)
三维笛卡尔坐标系分为:左手坐标系、右手坐标系
这2个坐标系旋向性不同

判断左右坐标系的方法一:
拿出手,大拇指指向+x,食指指向+y
左手坐标系:左手中指能指向+z
右手坐标系:右手中指能指向+z


判断左右坐标系的方法二:
拿出手,大拇指指向+z,4指指向+x
弯曲4指,哪只手的4指能逐渐弯曲至+y,则是哪手坐标系
旋转正方向的确定:哪手坐标系,就用哪之手,大拇指指向旋转轴正方向,4指弯的方向就是旋转正方向
如下图,左手坐标系的旋转正方向是顺时针;右手坐标系的旋转正方向是逆时针


在不同坐标系下移动旋转的案例:



接下来注意术语:”坐标“,”位置“
不同坐标系的同一个坐标,对应不同的位置,但是旋转相同角度,得到的坐标相同,如:
在左手坐标系中,一个点 https://www.zhihu.com/equation?tex=A_1%28x_0%2Cy_0%2Cz_0%29 旋转角度后,得到 https://www.zhihu.com/equation?tex=A_2%28x_1%2Cy_1%2Cz_1%29
同样在右手坐标系,一个点 https://www.zhihu.com/equation?tex=B_1%28x_0%2Cy_0%2Cz_0%29 旋转角度后,也会得到 https://www.zhihu.com/equation?tex=B_2%28x_1%2Cy_1%2Cz_1%29
但是这只是对各自坐标系而言的,实际上如果放在同一个坐标系下来看, https://www.zhihu.com/equation?tex=A_1 和 https://www.zhihu.com/equation?tex=B_1 不在同一个位置, https://www.zhihu.com/equation?tex=A_2 和 https://www.zhihu.com/equation?tex=B_2 可能在同一个位置



起始点(0,0,1),绕+y旋转90°

左手坐标系的点想要和右手坐标系的点位置重合,就需要将一个值取反,如:
左手坐标系 https://www.zhihu.com/equation?tex=%28x_0%2Cy_0%2Cz_0%29 和右手坐标系、、 https://www.zhihu.com/equation?tex=%28-x_0%2Cy_0%2C-z_0%29 重合,(注意:这里的坐标系是可以自由旋转的,不然怎么可能 既和 重合,又和重合呢)



起始点(0,0,1),绕+y旋转90°

2个坐标系转换:其实只要将坐标系的某一个轴反向,就变成了另一个坐标系

4.2.4 Unity使用的坐标系

1.模型空间、世界空间——左手坐标系


2.观察空间——右手坐标系
观察空间:以摄像机为原点,摄像机的后方为+z,镜头(可以理解为你电脑屏幕)右方是+x,上方为+y



补充:3dmax、blender世界空间都是右手坐标系,所以模型导出fbx到Unity前要进行变换



Blender的世界空间坐标系(右手坐标系)

<hr/>4.3点和矢量

点(point)只有位置的概念,无大小
矢量(verctor,向量),有大小和方向
标量(scalar),只有大小

矢量被用于表示相对于某点的偏移量
矢量的头:箭头的位置 ;矢量的尾:向量的起始点

不同量的表示方法:

[*]标量的表示:用小写字母表示,如a,b,c
[*]矢量的表示:用粗体小写字母表示,如,, https://www.zhihu.com/equation?tex=%5Cmathbf%7Bc%7D
[*]矩阵的表示:用粗体大写字母表示,如,, https://www.zhihu.com/equation?tex=%5Cmathbf%7BC%7D

4.3.1 点和矢量的区别

任何一个点都是从原点出发的矢量



4.3.2矢量运算

1.向量和标量乘法/除法


https://www.zhihu.com/equation?tex=k%5Cmathbf%7Bv%7D%3D%28kv_x%2Ckv_y%2Ckv_z%29
注意:对于乘法,向量和标量的位置可以互换;对于除法,只能向量被标量除

2.向量的加法和减法


https://www.zhihu.com/equation?tex=%5Cmathbf%7Ba%7D%2B%5Cmathbf%7Bb%7D%3D%28a_x%2Bb_x%2Ca_y%2Bb_y%2Ca_z%2Bb_z%29
注意:向量不能和标量相加减,或者说不能和不同维度的向量运算
几何意义:在图形学中常用于表述位置偏移(简称位移)


位移的理解:

可以表示相对于原点的位移; https://www.zhihu.com/equation?tex=%5Cmathbf%7Bb%7D-%5Cmathbf%7Ba%7D 表示点 b 相对于点 a 的位移

3.向量的模(向量的长度)


https://www.zhihu.com/equation?tex=%7C%5Cmathbf%7Bv%7D%7C%3D%5Csqrt%7Bv_x%5E2%2Bv_y%5E2%2Bv_z%5E2%7D

4.单位向量(归一化向量)

模长为1的向量,用 https://www.zhihu.com/equation?tex=%5Chat%7B%5Cmathbf%7Bv%7D%7D 表示
向量的归一化: https://www.zhihu.com/equation?tex=%5Cmathbf%7B%5Chat%7Bv%7D%7D%3D%5Cdfrac%7B%5Cmathbf%7Bv%7D%7D%7B%7C%5Cmathbf%7Bv%7D%7C%7D+    ;(是任意非零向量)
三维空间中,单位向量从一个单位球的球心出发,到达球面
在很多情况下,我们只关心向量的方向,例如,在计算光照模型时,我们需要得到的顶点的法线方向和光源方向,此时就需要进行向量的归一化

零向量

https://www.zhihu.com/equation?tex=%5Cmathbf%7Bv%7D%3D%280%2C0%2C0%29%29+ ,每个分量都为0,无法进行归一化

5.向量的点积(dot)

2个向量点积的结果为标量
公式一: https://www.zhihu.com/equation?tex=%5Cmathbf%7Ba%7D%5Ccdot%5Cmathbf%7Bb%7D%3D%28a_x%2Ca_y%2Ca_z%29%5Ccdot%28b_x%2Cb_y%2Cb_z%29%3Da_xb_x%2Ba_yb_y%2Ba_zb_z
性质:

[*]交换律 https://www.zhihu.com/equation?tex=+%5Cmathbf%7Ba%7D%5Ccdot%5Cmathbf%7Bb%7D%3D%5Cmathbf%7Bb%7D%5Ccdot%5Cmathbf%7Ba%7D
[*]结合标量乘法https://www.zhihu.com/equation?tex=%28k%5Cmathbf%7Ba%7D%29%5Ccdot%5Cmathbf%7Bb%7D%3D%5Cmathbf%7Ba%7D%5Ccdot+%28k%5Cmathbf%7Bb%7D%29%3Dk%28%5Cmathbf%7Ba%7D%5Ccdot%5Cmathbf%7Bb%7D%29
[*]分配律https://www.zhihu.com/equation?tex=%5Cmathbf%7Ba%7D%5Ccdot%28%5Cmathbf%7Bb%7D+%2B%5Cmathbf%7Bc%7D%29%3D%5Cmathbf%7Ba%7D%5Ccdot%5Cmathbf%7Bb%7D%2B%5Cmathbf%7Ba%7D%5Ccdot%5Cmathbf%7Bc%7D
[*]向量点积自己,为自己模的平方   https://www.zhihu.com/equation?tex=%5Cmathbf%7Bv%7D%5Ccdot%5Cmathbf%7Bv%7D%3Dv_xv_x%2Bv_yv_y%2Bv_zv_z%3D%7C%5Cmathbf%7Bv%7D%7C%5E2
公式二: https://www.zhihu.com/equation?tex=%5Cmathbf%7Ba%7D%5Ccdot%5Cmathbf%7Bb%7D%3D%7C%5Cmathbf%7Ba%7D%7C%7C%5Cmathbf%7Bb%7D%7Ccos%7B%5Ctheta%7D
其中:

https://www.zhihu.com/equation?tex=cos%7B%5Ctheta%7D+%3D+%5Cfrac%7B%E7%9B%B4%E8%A7%92%E8%BE%B9%7D%7B%E6%96%9C%E8%BE%B9%7D%3D%5Cmathbf%7B%5Chat%7Ba%7D%7D%5Ccdot%5Cmathbf%7B%5Chat%7Bb%7D%7D+%EF%BC%9B++++%5Ctheta+%3Darcos%28%5Cmathbf%7B%5Chat%7Ba%7D%7D%5Ccdot%5Cmathbf%7B%5Chat%7Bb%7D%7D%29

https://www.zhihu.com/equation?tex=%7C%5Cmathbf%7Bb%7D%7Ccos%7B%5Ctheta%7D 可以理解为在方向上的投影(有正负)



6.向量的叉积(外积)(cross)

向量叉积的结果还是向量

https://www.zhihu.com/equation?tex=%5Cmathbf%7Ba%7D%5Ctimes%5Cmathbf%7Bb%7D%3D%28a_x%2Ca_y%2Ca_z%29%5Ctimes%28b_x%2Cb_y%2Cb_z%29%3D%28a_yb_z-a_zb_y%2Ca_zb_x-a_xb_z%2Ca_xb_y-a_yb_x%29






https://www.zhihu.com/equation?tex=%7C%5Cmathbf%7Ba%7D%5Ctimes%5Cmathbf%7Bb%7D%7C%3D%7C%5Cmathbf%7Ba%7D%7C%7C%5Cmathbf%7Bb%7D%7Csin%7B%5Ctheta%7D+ (所以当和平行时, https://www.zhihu.com/equation?tex=%7C%5Cmathbf%7Ba%7D%5Ctimes%5Cmathbf%7Bb%7D%7C%3D0 )
几何性质: https://www.zhihu.com/equation?tex=%7C%5Cmathbf%7Ba%7D%5Ctimes%5Cmathbf%7Bb%7D%7C%3DS_%7B%E5%B9%B3%E8%A1%8C%E5%9B%9B%E8%BE%B9%E5%BD%A2%7D



性质:

[*]反交换律 https://www.zhihu.com/equation?tex=+%5Cmathbf%7Ba%7D%5Ctimes%5Cmathbf%7Bb%7D%3D-%28%5Cmathbf%7Bb%7D%5Ctimes%5Cmathbf%7Ba%7D%29
[*]不满足结合律   https://www.zhihu.com/equation?tex=%28%5Cmathbf%7Ba%7D%5Ctimes%5Cmathbf%7Bb%7D%29%5Ctimes%5Cmathbf%7Bc%7D%5Cne%5Cmathbf%7Ba%7D%5Ctimes%28%5Cmathbf%7Bb%7D%5Ctimes%5Cmathbf%7Bc%7D%29
[*]https://www.zhihu.com/equation?tex=%5Cmathbf%7Ba%7D%5Ctimes%5Cmathbf%7Ba%7D%3D%5Cmathbf%7B0%7D ,   (注意是 https://www.zhihu.com/equation?tex=%5Coverrightarrow%7B0%7D ,而不是标量0)

叉积后的方向判断:

https://www.zhihu.com/equation?tex=%5Cmathbf%7Ba%7D%5Ctimes%5Cmathbf%7Bb%7D%5Cperp%5Cmathbf%7Ba%7D%2C%5Cmathbf%7Bb%7D ,即叉积后的结果垂直于和构成的平面
右手坐标系:右手的4指指向,然后绕向,大拇指的方向就是的方向
左手坐标系用左手


(不论是哪个坐标系,叉积后的数学表达结果是一样的,只是表现的视觉效果不同)

补充:叉积的矩阵表示(中间的是矩阵行列式,右边的是矩阵)

https://www.zhihu.com/equation?tex=%5Cmathbf%7Ba%7D%5Ctimes%5Cmathbf%7Bb%7D%3D%5Cleft%7C+%5Cbegin%7Barray%7D%7Bccc%7D+x_a+%26+y_%7Ba%7D+%26+z_a+%5C%5C+x_b+%26+y_b+%26+z_b+%5C%5C+i+%26+j+%26+k+%5Cend%7Barray%7D+%5Cright%7C%3D%5Cleft%28+%5Cbegin%7Barray%7D%7Bccc%7D+0+%26+-z_%7Ba%7D+%26+y_a+%5C%5C+z_a+%26+0+%26+-x_a+%5C%5C+-y_a+%26+x_a+%26+0+%5Cend%7Barray%7D+%5Cright%29

叉积的应用:
1.通过叉积判断左右
如左图,改图为 https://www.zhihu.com/equation?tex=xy 平面, https://www.zhihu.com/equation?tex=z 的方向朝向纸外(右手坐标系)
当的z方向为正时,则说明在的左侧,反之则在右侧



图片来源:Games101

2.通过叉积判断内外
如右图点,当 https://www.zhihu.com/equation?tex=%5Coverrightarrow%7BAB%7D%5Ctimes%5Coverrightarrow%7BAP%7D 与 https://www.zhihu.com/equation?tex=%5Coverrightarrow%7BBC%7D%5Ctimes%5Coverrightarrow%7BBP%7D 与 https://www.zhihu.com/equation?tex=%5Coverrightarrow%7BCA%7D%5Ctimes%5Coverrightarrow%7BCP%7D 的方向相同时,则说明在三角形 https://www.zhihu.com/equation?tex=ABC 内部
(这其实是后来的光栅化基础,因为需要判断像素是否在三角形内)
<hr/> 4.4矩阵

4.4.1 矩阵的定义

行(row),列(column)
3行x4列矩阵:

https://www.zhihu.com/equation?tex=%5Cmathbf%7BM%7D%3D%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+m_%7B11%7D+%26+m_%7B12%7D+%26+m_%7B13%7D+%26+m_%7B14%7D+%5C%5C+m_%7B21%7D+%26+m_%7B22%7D+%26+m_%7B23%7D+%26+m_%7B24%7D%5C%5C+m_%7B31%7D+%26+m_%7B32%7D+%26+m_%7B33%7D+%26+m_%7B34%7D%5Cend%7Barray%7D+%5Cright%5D

https://www.zhihu.com/equation?tex=m_%7Bij%7D 表示这个元素在矩阵的第 https://www.zhihu.com/equation?tex=+i 行、第 https://www.zhihu.com/equation?tex=j+ 列

4.4.2 和向量联系起来

向量可以用行矩阵(行向量)和列矩阵(列向量)表示
行矩阵(行向量) https://www.zhihu.com/equation?tex=%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+v_%7B1%7D+%26+v_%7B2%7D+%26+v_%7B3%7D+%5Cend%7Barray%7D+%5Cright%5D
列矩阵(列向量) https://www.zhihu.com/equation?tex=%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+v_%7B1%7D+%5C%5C+v_%7B2%7D+%5C%5C+v_%7B3%7D+%5Cend%7Barray%7D+%5Cright%5D+
4.4.3 矩阵运算

1. 矩阵和标量的乘法

矩阵的每个元素和标量相乘

https://www.zhihu.com/equation?tex=k%5Cmathbf%7BM%7D%3D%5Cmathbf%7BM%7Dk%3Dk%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+m_%7B11%7D+%26+m_%7B12%7D+%26+m_%7B13%7D++%5C%5C+m_%7B21%7D+%26+m_%7B22%7D+%26+m_%7B23%7D+%5C%5C+m_%7B31%7D+%26+m_%7B32%7D+%26+m_%7B33%7D+%5Cend%7Barray%7D+%5Cright%5D%3D%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+km_%7B11%7D+%26+km_%7B12%7D+%26+km_%7B13%7D++%5C%5C+km_%7B21%7D+%26+km_%7B22%7D+%26+km_%7B23%7D+%5C%5C+km_%7B31%7D+%26+km_%7B32%7D+%26+km_%7B33%7D+%5Cend%7Barray%7D+%5Cright%5D

2.矩阵和矩阵的乘法

第一个矩阵的列数必须等于第二个矩阵的行数,它们相乘结果得到的矩阵的行数和第一个一样,列数和第二个一样
即, https://www.zhihu.com/equation?tex=r%5Ctimes+n+ 的矩阵和 https://www.zhihu.com/equation?tex=n%5Ctimes+c 的矩阵相乘,结果 https://www.zhihu.com/equation?tex=%5Cmathbf%7BAB%7D 为的矩阵

具体表达式,设 https://www.zhihu.com/equation?tex=%5Cmathbf%7BC%7D%3D%5Cmathbf%7BA%7D%5Cmathbf%7BB%7D
则 https://www.zhihu.com/equation?tex=c_%7Bij%7D%3Da_%7Bi1%7Db_%7B1j%7D%2Ba_%7Bi2%7Db_%7B2j%7D%2B%5Cdots+%2Ba_%7Bin%7Db_%7Bnj%7D%3D++%5Csum%5Climits_%7Bk%3D1%7D%5E%7Bn%7Da_%7Bik%7Db_%7Bkj%7D+
如下图 https://www.zhihu.com/equation?tex=c_%7B23%7D%3Da_%7B21%7Db_%7B13%7D%2Ba_%7B22%7Db_%7B23%7D


性质:

[*]不满足交换律https://www.zhihu.com/equation?tex=%5Cmathbf%7BA%7D%5Cmathbf%7BB%7D%5Cne+%5Cmathbf%7BB%7D%5Cmathbf%7BA%7D
[*]结合律 https://www.zhihu.com/equation?tex=+%28%5Cmathbf%7BA%7D%5Cmathbf%7BB%7D%29%5Cmathbf%7BC%7D%3D+%5Cmathbf%7BA%7D%28%5Cmathbf%7BB%7D%5Cmathbf%7BC%7D%29+%5Cmathbf%7BA%7D%5Cmathbf%7BB%7D%5Cmathbf%7BC%7D%5Cmathbf%7BD%7D%5Cmathbf%7BE%7D%3D+%28%28%5Cmathbf%7BA%7D%28%5Cmathbf%7BB%7D%5Cmathbf%7BC%7D%29%29%5Cmathbf%7BD%7D%29%5Cmathbf%7BE%7D%3D%28%5Cmathbf%7BA%7D%5Cmathbf%7BB%7D%29%5Cmathbf%7BC%7D%28%5Cmathbf%7BD%7D%5Cmathbf%7BE%7D%29
4.4.4 特殊的矩阵

1.方块矩阵(square matrix)


https://www.zhihu.com/equation?tex=n%5Ctimes+n 的矩阵

对角矩阵(diagonal elements)
方块矩阵除了对角外的所有元素都为0
如: https://www.zhihu.com/equation?tex=%5Cmathbf%7BM_%7B4%5Ctimes+4%7D%7D%3D%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+m_%7B11%7D+%26+0+%26+0+%26+0+%5C%5C0+%26+m_%7B22%7D+%260+%26+0%5C%5C+0+%26+0+%26+m_%7B33%7D+%26+0+%5C%5C+0+%26+0+%26+0+%26+m_%7B44%7D%5Cend%7Barray%7D+%5Cright%5D

2.单位矩阵(indentity matrix)

对角的元素全为1的对角矩阵

https://www.zhihu.com/equation?tex=%5Cmathbf%7BI_3%7D%3D%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+1+%26+0+%26+0++%5C%5C0+%26+1+%260+%5C%5C+0+%26+0+%26+1+%5Cend%7Barray%7D+%5Cright%5D
单位矩阵和标量数字1一样

https://www.zhihu.com/equation?tex=%5Cmathbf%7BM%7D%5Cmathbf%7BI%7D%3D%5Cmathbf%7BI%7D%5Cmathbf%7BM%7D%3D%5Cmathbf%7BM%7D

3.转置矩阵(transposed matrix)

把原来矩阵翻转,行列对调

的矩阵 转置成 https://www.zhihu.com/equation?tex=+c%5Ctimes+r 的矩阵

https://www.zhihu.com/equation?tex=M_%7Bij%7D%5E%7BT%7D%3DM_%7Bji%7D
例如:

https://www.zhihu.com/equation?tex=%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+6+%26+2+%26+10+%26+3+%5C%5C7+%26+5+%264+%26+9%5C%5C+%5Cend%7Barray%7D+%5Cright%5D%5ET%3D%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+6+%26+7+%5C%5C+2+%26+5+%5C%5C10+%26+4+%5C%5C3+%26+9%5C%5C+%5Cend%7Barray%7D+%5Cright%5D+
行矩阵的转置为列矩阵,列矩阵的转置为行矩阵

https://www.zhihu.com/equation?tex=%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+x+%26+y+%26z+%5Cend%7Barray%7D+%5Cright%5D%5ET%3D%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+x++%5C%5C+y+%5C%5Cz+%5Cend%7Barray%7D+%5Cright%5D

https://www.zhihu.com/equation?tex=%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+x++%5C%5C+y+%5C%5Cz+%5Cend%7Barray%7D+%5Cright%5D%5ET%3D%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+x+%26+y+%26z+%5Cend%7Barray%7D+%5Cright%5D

性质:

[*]矩阵转置的转置等于原矩阵 https://www.zhihu.com/equation?tex=+%28%5Cmathbf%7BM%7D%5ET%29%5ET%3D%5Cmathbf%7BM%7D
[*]矩阵串接(相乘)的转置,等于方向串接(相乘)各个矩阵的转置
https://www.zhihu.com/equation?tex=+%28%5Cmathbf%7BABC%7D%29%5ET%3D%5Cmathbf%7BC%7D%5ET+%5Cmathbf%7BB%7D%5ET+%5Cmathbf%7BA%7D%5ET

4.逆矩阵(inverse matrix )

只有方阵才能有逆矩阵,不是所有方阵都有逆矩阵
给定一个方阵, 它的逆矩阵为
最重要的性质:
方阵和它的逆矩阵相乘为单位矩阵,即https://www.zhihu.com/equation?tex=%5Cmathbf%7BM%7D%5Cmathbf%7BM%7D%5E%7B-1%7D%3D%5Cmathbf%7BM%7D%5E%7B-1%7D%5Cmathbf%7BM%7D%3D%5Cmathbf%7BI%7D

如果一个矩阵有逆矩阵,则这个矩阵可逆(invertible)或者说是非奇异的(nonsingular)
如果一个矩阵无逆矩阵,则这个矩阵不可逆(noninvertible)或者说是奇异的(singular)

逆矩阵的性质:

[*]逆矩阵的逆矩阵是原矩阵本身,即 https://www.zhihu.com/equation?tex=+%28%5Cmathbf%7BM%7D%5E%7B-1%7D%29%5E%7B-1%7D%3D%5Cmathbf%7BM%7D
[*]单位矩阵的逆矩阵是它本身,即   https://www.zhihu.com/equation?tex=%5Cmathbf%7BI%7D%5E%7B-1%7D%3D%5Cmathbf%7BI%7D
[*]转置矩阵的逆矩阵 是 逆矩阵的转置,即 https://www.zhihu.com/equation?tex=+%28%5Cmathbf%7BM%7D%5E%7BT%7D%29%5E%7B-1%7D%3D%28%5Cmathbf%7BM%7D%5E%7B-1%7D%29%5E%7BT%7D
[*]矩阵串接相乘后的逆矩阵等于反向串接各个逆矩阵(前提是各个矩阵都可逆)
https://www.zhihu.com/equation?tex=%28%5Cmathbf%7BABCD%7D%29%5E%7B-1%7D%3D%5Cmathbf%7BD%7D%5E%7B-1%7D%5Cmathbf%7BC%7D%5E%7B-1%7D+%5Cmathbf%7BB%7D%5E%7B-1%7D+%5Cmathbf%7BA%7D%5E%7B-1%7D+
逆矩阵的几何意义:逆矩阵允许我们还原这个变换,或者说计算这个变换的反向变换
我们使用变换矩阵对向量进行一次变换,然后再用它的逆矩阵进行另一次变换,那就会得到原来的向量

https://www.zhihu.com/equation?tex=%5Cmathbf%7BM%7D%5E%7B-1%7D%28%5Cmathbf%7BMv%7D%29%3D%28%5Cmathbf%7BM%7D%5E%7B-1%7D%5Cmathbf%7BM%7D%29%5Cmathbf%7Bv%7D%3D%5Cmathbf%7BIv%7D%3D%5Cmathbf%7Bv%7D+

通过行列式(determinant)判断矩阵可逆
如果一个矩阵的行列式不为0,则它就是可逆的
3阶矩阵行列式求法:
法一,对角线公式法:

https://www.zhihu.com/equation?tex=%5Cleft%7C+%5Cbegin%7Barray%7D%7B%7D+m_%7B11%7D+%26+m_%7B12%7D+%26+m_%7B13%7D++%5C%5C+m_%7B21%7D+%26+m_%7B22%7D+%26+m_%7B23%7D+%5C%5C+m_%7B31%7D+%26+m_%7B32%7D+%26+m_%7B33%7D+%5Cend%7Barray%7D+%5Cright%7C

https://www.zhihu.com/equation?tex=%3Dm_%7B11%7Dm_%7B22%7Dm_%7B33%7D%2Bm_%7B12%7Dm_%7B23%7Dm_%7B31%7D%2Bm_%7B13%7Dm_%7B21%7Dm_%7B32%7D-m_%7B13%7Dm_%7B22%7Dm_%7B31%7D-m_%7B12%7Dm_%7B21%7Dm_%7B33%7D-m_%7B11%7Dm_%7B23%7Dm_%7B32%7D+

法二:代数余子式,按任一行或列展开:

https://www.zhihu.com/equation?tex=%5Cleft%7C+%5Cbegin%7Barray%7D%7B%7D+m_%7B11%7D+%26+m_%7B12%7D+%26+m_%7B13%7D++%5C%5C+m_%7B21%7D+%26+m_%7B22%7D+%26+m_%7B23%7D+%5C%5C+m_%7B31%7D+%26+m_%7B32%7D+%26+m_%7B33%7D+%5Cend%7Barray%7D+%5Cright%7C%3Dm_%7B13%7D%5Cleft%7C+%5Cbegin%7Barray%7D%7B%7D+m_%7B21%7D+%26+m_%7B22%7D++%5C%5C+m_%7B31%7D+%26+m_%7B32%7D++%5Cend%7Barray%7D+%5Cright%7C-m_%7B23%7D%5Cleft%7C+%5Cbegin%7Barray%7D%7B%7D+m_%7B11%7D+%26+m_%7B12%7D++%5C%5C+m_%7B31%7D+%26+m_%7B32%7D++%5Cend%7Barray%7D+%5Cright%7C%2B+m_%7B33%7D%5Cleft%7C+%5Cbegin%7Barray%7D%7B%7D+m_%7B11%7D+%26+m_%7B12%7D++%5C%5C+m_%7B21%7D+%26+m_%7B22%7D++%5Cend%7Barray%7D+%5Cright%7C
前面的系数的正负号通过下表来判断,即 https://www.zhihu.com/equation?tex=%28-1%29%5E%7Bi%2Bj%7Dm_%7Bij%7D,所以是 https://www.zhihu.com/equation?tex=-m_%7B23%7D

5.正交矩阵(orthogonal matrix)

如果一个矩阵的转置==该矩阵的逆矩阵,那么这个矩阵是正交的,这个矩阵叫做正交矩阵
即 https://www.zhihu.com/equation?tex=%5Cmathbf%7BM%7D%5ET%3D%5Cmathbf%7BM%7D%5E%7B-1%7D 或者说https://www.zhihu.com/equation?tex=%5Cmathbf%7BM%7D%5Cmathbf%7BM%7D%5ET%3D%5Cmathbf%7BM%7D%5ET%5Cmathbf%7BM%7D%3D%5Cmathbf%7BI%7D

根据定义,一个3x3的正交矩阵

https://www.zhihu.com/equation?tex=%5Cmathbf%7BM%7D%5Cmathbf%7BM%7D%5ET%3D%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+a_%7B1%7D+%26+a_%7B2%7D+%26+a_%7B3%7D++%5C%5C+b_%7B1%7D+%26+b_%7B2%7D+%26+b_%7B3%7D+%5C%5C+c_%7B1%7D+%26+c_%7B2%7D+%26+c_%7B3%7D+%5Cend%7Barray%7D+%5Cright%5D%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+a_%7B1%7D+%26+b_%7B1%7D+%26+c_%7B1%7D++%5C%5C+a_%7B2%7D+%26+b_%7B2%7D+%26+c_%7B2%7D+%5C%5C+a_%7B3%7D+%26+b_%7B3%7D+%26+c_%7B3%7D+%5Cend%7Barray%7D+%5Cright%5D

https://www.zhihu.com/equation?tex=%3D%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+a_%7B1%7D%5E2%2Ba_%7B2%7D%5E2%2Ba_%7B3%7D%5E2+%26+a_%7B1%7Db_1%2Ba_%7B2%7Db_2%2Ba_%7B3%7Db_3+%26+a_%7B1%7Dc_1%2Ba_%7B2%7Dc_2%2Ba_%7B3%7Dc_3++%5C%5C+a_%7B1%7Db_1%2Ba_%7B2%7Db_2%2Ba_%7B3%7Db_3+%26+b_%7B1%7D%5E2%2Bb_%7B2%7D%5E2%2Bb_%7B3%7D%5E2+%26+b_%7B1%7Dc_1%2Bb_%7B2%7Dc_2%2Bb_%7B3%7Dc_3+%5C%5C+a_%7B1%7Dc_1%2Ba_%7B2%7Dc_2%2Ba_%7B3%7Dc_3+%26+b_%7B1%7Dc_1%2Bb_%7B2%7Dc_2%2Bb_%7B3%7Dc_3+%26+c_%7B1%7D%5E2%2Bc_%7B2%7D%5E2%2Bc_%7B3%7D%5E2+%5Cend%7Barray%7D+%5Cright%5D


可以写成向量形式 https://www.zhihu.com/equation?tex=%5Cmathbf%7Ba%E3%80%81b%E3%80%81c%7D+ ,即 https://www.zhihu.com/equation?tex=%5Cmathbf%7BM%7D%3D%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+%5Cmathbf%7Ba%7D%26-+%26-++%5C%5C+%5Cmathbf%7Bb%7D%26-%26-%5C%5C%5Cmathbf%7Bc%7D%26-%26-+%5Cend%7Barray%7D+%5Cright%5D ,注意这里的向量都是3维的,所以还是3x3的矩阵;符号” https://www.zhihu.com/equation?tex=- “表示按行展开向量,符号”|“表示按列展开向量

https://www.zhihu.com/equation?tex=%5Cmathbf%7BM%7D%5Cmathbf%7BM%7D%5ET%3D%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+%5Cmathbf%7Ba%7D%26-+%26-++%5C%5C+%5Cmathbf%7Bb%7D%26-%26-%5C%5C%5Cmathbf%7Bc%7D%26-%26-+%5Cend%7Barray%7D+%5Cright%5D%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+%5Cmathbf%7Ba%7D++%26+%5Cmathbf%7Bb%7D%26%5Cmathbf%7Bc%7D%5C%5C%7C++%26+%7C%26%7C%5C%5C+%7C++%26+%7C%26%7C+%5Cend%7Barray%7D+%5Cright%5D

https://www.zhihu.com/equation?tex=%3D%5Cleft%5B+%5Cbegin%7Barray%7D%7B%7D+%5Cmathbf%7Ba%7D%5Ccdot+%5Cmathbf%7Ba%7D+%26%5Cmathbf%7Ba%7D%5Ccdot+%5Cmathbf%7Bb%7D+%26+%5Cmathbf%7Ba%7D%5Ccdot+%5Cmathbf%7Bc%7D++%5C%5C+%5Cmathbf%7Bb%7D%5Ccdot+%5Cmathbf%7Ba%7D+%26+%5Cmathbf%7Bb%7D%5Ccdot+%5Cmathbf%7Bb%7D+%26+%5Cmathbf%7Bb%7D%5Ccdot+%5Cmathbf%7Bc%7D+%5C%5C+%5Cmathbf%7Bc%7D%5Ccdot+%5Cmathbf%7Ba%7D+%26+%5Cmathbf%7Bc%7D%5Ccdot+%5Cmathbf%7Bb%7D+%26+%5Cmathbf%7Bc%7D%5Ccdot+%5Cmathbf%7Bc%7D+%5Cend%7Barray%7D+%5Cright%5D


所以我们得到9个等式:

https://www.zhihu.com/equation?tex=%5Cmathbf%7Ba%7D%5Ccdot+%5Cmathbf%7Ba%7D%3D1%2C%5Cmathbf%7Ba%7D%5Ccdot+%5Cmathbf%7Bb%7D%3D0%2C%5Cmathbf%7Ba%7D%5Ccdot+%5Cmathbf%7Bc%7D%3D0%5C%5C%5Cmathbf%7Bb%7D%5Ccdot+%5Cmathbf%7Ba%7D%3D0%2C%5Cmathbf%7Bb%7D%5Ccdot+%5Cmathbf%7Bb%7D%3D1%2C%5Cmathbf%7Bb%7D%5Ccdot+%5Cmathbf%7Bc%7D%3D0%5C%5C%5Cmathbf%7Bc%7D%5Ccdot+%5Cmathbf%7Ba%7D%3D0%2C%5Cmathbf%7Bc%7D%5Ccdot+%5Cmathbf%7Bb%7D%3D0%2C%5Cmathbf%7Bc%7D%5Ccdot+%5Cmathbf%7Bc%7D%3D1
重点:所以一个矩阵是正交矩阵的条件:

[*]矩阵的每一行,即都是单位向量,这样它们点积自身结果才为1
[*]矩阵的每一行,即之间相互垂直,这样它们点积对方结果才为0
[*]上述的结论对每一列也都适用,因为是正交矩阵的话,则 https://www.zhihu.com/equation?tex=%5Cmathbf%7BM%7D%5ET 也是正交矩阵

笛卡尔三维坐标系的标准正交基(基矢量长度为1,相互垂直),所组成的矩阵就是一个正交矩阵
我们常构造正交矩阵,因为正交矩阵可以通过求 转置矩阵 快速得到 逆矩阵

4.4.5 行矩阵还是列矩阵(Unity选择向量成为列矩阵)

选择行矩阵还是列矩阵,这关系到矩阵之前乘法的次序和结果
在Unity中,常把向量放在矩阵的右侧,即把向量转为列矩阵来进行计算。这意味着,矩阵的乘法通常都是右乘(从右往左乘)

https://www.zhihu.com/equation?tex=%5Cmathbf%7BCBAv%7D%3D%5Cmathbf%7B%28C%28B%28Av%29%29%29%7D
上面的计算等价于下面的行矩阵计算,即将矩阵转置后计算

https://www.zhihu.com/equation?tex=%5Cmathbf%7Bv%7D%5Cmathbf%7BA%7D%5ET%5Cmathbf%7BB%7D%5ET%5Cmathbf%7BC%7D%5ET%3D%28%28%28%5Cmathbf%7Bv%7D%5Cmathbf%7BA%7D%5ET%29%5Cmathbf%7BB%7D%5ET%29%5Cmathbf%7BC%7D%5ET%29
<hr/>另外参考资料:Games101
再次声明:

本文章的学习内容来源全部出自《UnityShader入门精要》——冯乐乐
该文章只是本人我的学习笔记,里面对《UnityShader入门精要》进行了些许概括且加了自己的些许理解
如果想更加具体地了解其内容,建议购买原著进行学习
页: [1]
查看完整版本: 《UnityShader入门精要》学习笔记——第四章(上):学习 ...