Unity中主要是对顶点着色器、片元着色器以及测试阶段进行编程
表面着色器是Unity自己创建的着色器代码类型,本质上是顶点/片元着色器,但是Unity将其进行封装,但是渲染的代价比较大。
顶点/片元着色器,我们主要在此处控制渲染的实现细节。
固定函数着色器,早期的shader,不支持可编程的管线着色器,完成一些简单的效果,开关式操作。
三维笛卡尔坐标系,坐标轴是该坐标系的基矢量,互相垂直且长度为1,也成为标准正交基,长度不为1的称为正交基。
三维笛卡尔坐标系分为左手坐标系(OpenGL/Unity中使用这种)和右手坐标系(DirectX中使用这种)
矢量的点积(内积),计算两个矢量的相似性,几何意义是投影,结果是标量,所以能用交换律
矢量的叉积(外积),计算两个矢量所在平面的法向量,而该法向量的方向根据左右手法则可确定,交换两个矢量相乘的位置可得相反的结果,因为结果是矢量,所以不能用交换律
矩阵的乘法 不满足交换律
方块矩阵,简称方阵,三维渲染中,最常使用的是3*3 和 4*4的矩阵
对角矩阵,除了对角线上的元素以外,其他元素都为0。
单位矩阵,对角线元素为1,其他元素为0,一般用 “I” 来表示,且MI = IM = M
转置矩阵,矩阵的行和列进行互换,即c*r 变为 r*c
逆矩阵,一个矩阵的行列式不为0,那么该矩阵是可逆的,
正交矩阵,一个矩阵和其转置矩阵相乘为单位矩阵,那么该矩阵是正交的,且该矩阵的转置与该矩阵的逆矩阵相同。
矩阵的几何变换
矩阵的变换中,使用4*4 的变换矩阵进行变换,把原矢量或点也转换为4*1的齐次坐标,第4维为0(方向矢量)或1(点)。
在旋转中,矩阵旋转要区分绕哪个轴旋转,常用其他旋转为四元数旋转和欧拉角旋转
矩阵旋转中,绕x(y或z)轴旋转,该轴所在分量值为1,其他分量为其正负正弦值或正负余弦值。绕任意轴旋转,根据其法向量来确定旋转矩阵。
四元数为 p=(w,v)=(w,(x,y,z))= w+xi+yj+zk,其中 v为向量,w为实数,i\j\k为虚数,x\y\z为坐标值的分量
欧拉角旋转,是根据一定的先后顺序从而将物体转至想要的角度,但会遇到万向锁(两个旋转轴重叠在一起)问题
旋转问题较为复杂,并且值得细细推敲,这里只是给出最最最最最最简单的介绍,详细的请参考其他博文!
复合变换中,乐乐姐约定的变换顺序是先缩放,再旋转,最后平移。
从原点缩放,其坐标不会发生改变 因为0*n=0,而平移以后,对象坐标会发生变化比如(0,0,5),那么缩放后就会变为(0,0,10),与结果不符。
坐标空间的变换:模型空间——>世界空间——>观察空间——>裁剪空间——>屏幕空间
模型空间:物体本身所在的空间坐标,也称为局部坐标
世界空间:整个场景空间
观察空间:摄像机空间,对象物体相对于摄像机的空间坐标系。
裁剪空间:即齐次裁剪空间,该空间是由视锥体决定的,视锥体有两种类型,即正交投影和透视投影
透视投影:根据摄像头的横纵比、近裁剪平面、远裁剪平面、竖直方向的张开角度来决定。
正交投影:其视锥体是一个长方体,根据远近裁剪平面的高度和远近来决定。
屏幕空间:通过标准齐次除法(透视除法),将视锥体投影到屏幕空间。