Unity Shader (3)

1、左手右手坐标系

2、Unity 的模型空间与世界空间使用的是左手坐标系,Camera使用的是右手坐标系

  

3、一定要理解的两个矢量运算,他们是图形算法的必备良药,这里的理解不仅仅计算公式,是几何意义上的理解

 1)点积(内积):从数学上想来,很容易联想到它能够计算余玄(cos),结果是一个标量,那么更进一步的几何意义是后者在前者方向上的投影,大部分数学库提供的函数名为dot

 

 

  2)叉积(外积):在数值上它的运算结果任然是一个矢量,在方向上会垂直于原来两个矢量所在的平面,它不满足交换律但是下式成立 aXb = -(bXa),一个有意思的是它的模长满足 |aXb| = |a||b|sinα,从几何上理解可以解释为以两个矢量为相邻边的平行四边形的面积(底乘以高);垂直一个平面有两个方向,当使用右手坐标系时,就使用右手掌心朝向a,四指掌面向b握紧,此时大拇指的方向就是新矢量的方向(说的很抽象,下图),左手坐标系类比

 

 

它常用于计算法线、切线空间等信息

 

4、矩阵

 1)逆矩阵

 2)正交矩阵:逆矩阵是自己的转置矩阵,可以简化求逆的计算

 

5、矩阵的乘法不满足交换律,所以在执行复合变换时,需要注意矩阵运算顺序 translation*rotation*scale*vertex

 

6、Unity提供了大量的内置参数,能够在安装目录下的UnityShaderVariables.cginc中查看

 7、UNITY_MATRIX_T_MV 是MV的转置矩阵,在只进行了缩放旋转时,应该好好利用它简单地计算出逆矩阵来减轻运算量。

  UNITY_MATRIX_IT_MV 是MV的逆转置矩阵,常用于与法线相关的变换,如把模型空间变换到观察空间

 

8、Unity的内置矩阵变量都是按列存储,因此一般都是用右乘,但有时使用左乘是因为可以节省转置

 

 

posted @ 2020-03-19 16:20  no-being  阅读(186)  评论(0编辑  收藏  举报