本系列文章是学习siki学院Unity Shader入门(Unity2018.3)笔记

一.二维向量

Unity shader基础学习(三) ------ 数学基础

二维向量运算(加法) :

Unity shader基础学习(三) ------ 数学基础

减法 :

Unity shader基础学习(三) ------ 数学基础

点乘 :

Unity shader基础学习(三) ------ 数学基础

叉乘 :

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

二维坐标系旋转变换 :

Unity shader基础学习(三) ------ 数学基础

二维坐标平移变换:

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

二.矩阵

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

1.变换物体与变换坐标系 :

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

可知道旋转坐标系相当于以相反的量旋转物体(其他变换也是一样)

因此矩阵可以用来对向量进行变换成另一个向量,如果对坐标系的的每个基向量进行变换,就能旋转拉伸坐标系

2.坐标旋转矩阵

Unity shader基础学习(三) ------ 数学基础

二维旋转矩阵推理过程 :

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

Θ为正是逆时针旋转,Θ为负是顺时针旋转

三维绕轴旋转推理 :
绕X轴旋转时,X不变,因此旋转矩阵第三行为(1,0,0),然后如左上角的图,Y Z平面进行旋转,由(p q)变成(p` q`)

Unity shader基础学习(三) ------ 数学基础

三维绕任意轴旋转推理 :

v向量绕n轴旋转Θ角度

Unity shader基础学习(三) ------ 数学基础

转换成二维来计算 :

Unity shader基础学习(三) ------ 数学基础

那么要求V`就相当于求垂直v向量 :

Unity shader基础学习(三) ------ 数学基础

将上面的图画成二维 :

Unity shader基础学习(三) ------ 数学基础

V(T)` [垂直v向量] 推导 :
V平行向量就是V向量在n向量的投影,可以用点乘来计算

Unity shader基础学习(三) ------ 数学基础

最后得到V` :

Unity shader基础学习(三) ------ 数学基础

叉乘公式 :

Unity shader基础学习(三) ------ 数学基础

然后代入基向量进行计算 :

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

最终可得矩阵 :

Unity shader基础学习(三) ------ 数学基础

3.坐标缩放矩阵

Unity shader基础学习(三) ------ 数学基础

均匀缩放 : 等比例分辨
非均匀缩放 : 每个轴的缩放因子不一样

均匀沿轴缩放二维三维 :

Unity shader基础学习(三) ------ 数学基础

V向量沿n方向(任意)缩放 :

Unity shader基础学习(三) ------ 数学基础

推导 :

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

那么二维上沿任意轴缩放代入公式 :

Unity shader基础学习(三) ------ 数学基础

因此二维沿任意轴缩放矩阵为 :

Unity shader基础学习(三) ------ 数学基础

二维上沿任意轴缩放代入公式 :

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

三维沿任意轴缩放矩阵为 :

Unity shader基础学习(三) ------ 数学基础

4.正交投影

三维正交投影Z全变成0,参考【线性代数】正交投影

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

S中第一个[]是投影方向(垂直于平面的单位向量)

Unity shader基础学习(三) ------ 数学基础

二维三维沿任意方向投影是归纳总结出来的

镜像矩阵 : S第二个参数是缩放因子,=0时代表投影矩阵,-1时是镜像矩阵

二维镜像矩阵 :

Unity shader基础学习(三) ------ 数学基础

三维镜像矩阵:

Unity shader基础学习(三) ------ 数学基础

5.切变

Unity shader基础学习(三) ------ 数学基础

扭曲拉伸,面积(体积)没有变化,S : 切变因子

Unity shader基础学习(三) ------ 数学基础

非均匀缩放

6.变换组合

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

7.行列式

Unity shader基础学习(三) ------ 数学基础

二阶行列式推导 :

Unity shader基础学习(三) ------ 数学基础

将前面的系数提出来就是二阶行列式 :

Unity shader基础学习(三) ------ 数学基础

因此用行列式计算方程组非常简单

Unity shader基础学习(三) ------ 数学基础

叉乘利用行列式计算 :

Unity shader基础学习(三) ------ 数学基础

行列式性质 :

Unity shader基础学习(三) ------ 数学基础

行列变换后行列式不变 :

Unity shader基础学习(三) ------ 数学基础

下三角矩阵行列式计算 :

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

N阶行列式可转换成上三角/下三角进行计算 :

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

余子式 :
行列式的阶越低越容易计算,于是很自然地提出,能否把高阶行列式转换为低阶行列式来计算,为此,引入了余子式和代数余子式的概念。
在n阶行列式中,把所在的第i行与第j列划去后,所留下来的n-1阶行列式叫元的余子式。

Unity shader基础学习(三) ------ 数学基础

性质1:

Unity shader基础学习(三) ------ 数学基础

推导 :
i = 1 j= 1:

Unity shader基础学习(三) ------ 数学基础

行列式A中两行(或列)互换,其结果等于-A
因此当i,j != 1时需要变换i-1(行互换) + j-1(列互换) :

Unity shader基础学习(三) ------ 数学基础

性质2:行列式按行按列展开法则

Unity shader基础学习(三) ------ 数学基础

根据性质1推导 :

Unity shader基础学习(三) ------ 数学基础

行列式的几何解释 :

Unity shader基础学习(三) ------ 数学基础

8.伴随矩阵与逆矩阵

Unity shader基础学习(三) ------ 数学基础

跟矩阵的逆有关系

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

如果M的行列式不等于0就是可逆矩阵
如果矩阵不可逆,称为奇异矩阵
M的逆矩阵计算 :

Unity shader基础学习(三) ------ 数学基础

M的逆矩阵性质 :

Unity shader基础学习(三) ------ 数学基础

9.正交矩阵

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

单位向量的点击才=1,因此r1,r2,r3是单位向量

Unity shader基础学习(三) ------ 数学基础

正交矩阵是一组标准正交基,但是一组正交基组成的矩阵不一定是正交矩阵,因为长度不一样

10.齐次矩阵

Unity shader基础学习(三) ------ 数学基础

加了一个维度之后结果没有变化 [x,y,z]增加一维,[x,y,z,w]转换回来是[x/w,y/w,z/w],w=1时,不会有变化

4阶平移矩阵 :

Unity shader基础学习(三) ------ 数学基础

R : 旋转矩阵 T : 平移矩阵

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

W控制平移的开关 : w = 0时,乘以平移矩阵结果跟之前一样

Unity shader基础学习(三) ------ 数学基础

11.变换分类

Unity shader基础学习(三) ------ 数学基础

①.线性变换

Unity shader基础学习(三) ------ 数学基础

②.仿射变换

Unity shader基础学习(三) ------ 数学基础

③.可逆变换

Unity shader基础学习(三) ------ 数学基础

④.等角变换

变换前后,夹角大小方向都不变

12.一般仿射变换

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

13.透视投影

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

画成二维 :

Unity shader基础学习(三) ------ 数学基础

可得到 :

Unity shader基础学习(三) ------ 数学基础
Unity shader基础学习(三) ------ 数学基础

一般是向z = d方向投影:

Unity shader基础学习(三) ------ 数学基础

上面得到的是投影结果,投影矩阵可通过逆推得到

Unity shader基础学习(三) ------ 数学基础

要注意,上面的矩阵乘完之后的结果还有需要消元成三维坐标才是最终的结果

相关文章: