线性代数
4X4单位矩阵
4*4矩阵表示4行4列:
矩阵的转置:把矩阵A的行换成同序数的列所得到的新矩阵称为A的转置矩阵,这一过程称为矩阵的转置。
逆矩阵: 设A是数域上的一个n阶方阵,若在相同数域上存在另一个n阶矩阵B,使得: AB=BA=E。 则我们称B是A的逆矩阵,而A则被称为可逆矩阵。
矩阵的乘法:两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。如A是m×n矩阵和B是n×p矩阵,它们的乘积C是一个m×p矩阵
,它的一个元素:并将此乘积记为: .
计算法则:每一行的各个数与每一列的各个数相乘=等于该元素的乘积。
测试Unity 矩阵:
得出结果:
从输出可以看到unity的矩阵采用矩阵左乘法,即向量用列向量表示, 也正是因为采用列向量表示, 矩阵的16个元素(m[i]:i表示0~15)前面是个是第一列,然后是第二列,第三列和第四列。
Row 行;Cloum 列。
行矩阵:只有一行的矩阵,一般在矩阵中采用右乘。
例,该矩阵与4X4的矩阵相乘,结果为1*4的矩阵。
列矩阵:只有一列的矩阵,一般在矩阵中采用左乘,
例,4X4矩阵与该向量相乘,结果为4X1的矩阵。
Unity Shader
在Vertex Function函数中,将模型空间的顶点转换到投影空间, o.pos = mul(UNITY_MATRIX_MVP, v.vertex); 理解为矩阵采用左乘,顶点向量是列向量,使用齐次坐标得到4X1的矩阵.
顶点从模型空间转换到世界坐标空间只需要乘以世界转换矩阵即可,但是顶点的法向量却不能通过直接乘以这个矩阵将其变换到世界空间。原因是世界矩阵不仅包含旋转,还有可能包含着缩放操作,如果模型被不成比例的缩放,在不同方向上会有不同程度的拉伸或者压缩,顶点的坐标会因而伸缩,但是如果对法向量进行同样的伸缩,那么变化后的法向量将不再垂直于对应的表面。因此对应没有缩放或等比缩放的世界转换矩阵,可以直接采用相同的转换矩阵作为法向量的变换矩阵。