Unity Shader总结(二)——矢量和矩阵
一、向量的点乘
用途
1.计算向量的投影
2.根据cos值来判断是否在视野范围内或者在物体的前后左右。
二、 向量的叉乘
用途
1.求出法向量
2.判断三角面片正反
三、矩阵
正交矩阵
矩阵中要注意的正交矩阵,一个正交矩阵的转置和它的逆矩阵相等,即:
逆矩阵求解计算量大,所以当它是正交矩阵时只要转置一下就是逆矩阵。
判断正交矩阵可以判断 M M T MM^{T} MMT是否是单位矩阵,最节省计算量的方法还是直接判断该矩阵是否是由标准正交基构成。例如:
在Unity中矩阵相乘常规做法是把矢量放在矩阵右侧,即 A v = v A T Av=vA^{T} Av=vAT
仿射变换
首先梳理一下知识点
线性变换(3x3矩阵):缩放和旋转
仿射变换(齐次坐标空间,4x4矩阵):合并了线性变换和平移变换,3x3矩阵没有办法进行平移。
平移
对点平移(对矢量没有用,矢量没有位置的概念)
[ 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ] \begin{bmatrix} 1&0 &0 & t_{x}\\ 0& 1 & 0 &t_{y} \\ 0& 0& 1& t_{z}\\ 0& 0& 0&1 \end{bmatrix} ⎣⎢⎢⎡100001000010txtytz1⎦⎥⎥⎤ [ x y z 1 ] \begin{bmatrix} x\\ y\\ z\\ 1 \end{bmatrix} ⎣⎢⎢⎡xyz1⎦⎥⎥⎤
缩放
对点: [ k x 0 0 0 0 k y 0 0 0 0 k z 0 0 0 0 1 ] \begin{bmatrix} k_{x}&0 &0 & 0\\ 0& k_{y} & 0 &0\\ 0& 0& k_{z}& 0\\ 0& 0& 0&1 \end{bmatrix} ⎣⎢⎢⎡kx0000ky0000kz00001⎦⎥