一,简单介绍下几个概念。
1)线性空间:
实际上就是向量空间,一切的计算都是合理且符合数学规律的。例如在线性空间中1+1 = 2。在非线性空间中,1+1=0.7。这个例子很好解释了线性空间的概念。Gama空间就是典型的非线性空间,这里主要讨论矩阵,就不展开分析了。
2)矩阵和向量的本质:
向量的本质是物体(长宽高朝向之类的),矩阵的本质是物体的运动。基本上所有矩阵的运算,都是在对物体做运动。(这个物体是广义上的,包括坐标啊之类的,模型空间坐标到裁剪空间坐标的变换也看做是一种运动)。
二,矩阵与向量的结合
向量可以看成是nX1的列矩阵和1Xn的行矩阵。
三,矩阵运算
1,与常数相乘
公式见下图(知乎找了半天打不了矩阵orz)
2,矩阵与矩阵相乘
1)设A为rXn,B为nXl
也就是说,只有A的列数 ==B 的行数,才能相乘。
2)公式法(冗长的公式,我一般不用,这里只是理性列出来)
这个公式的意思就是,
3)向量法(实际上和公式法本质一样,但是我感觉直观多了)
意思是把矩阵的行列,当作向量来看,从而直接写出点积。举个栗子。
可以看出来,左边矩阵的行是向量,右边矩阵列是向量。最终结果就是这两种向量的点积。最终矩阵的结果可以看出规律,行上面行不变列变,列上面列不变行遍。
然后就把点积算出来就行了。
手动算矩阵很累,一般来说在unity中,有提供的矩阵可以用,程序也可以自动帮助运算矩阵。
3,转置
转置的英文是:transpose 所以转置矩阵用上标
举个栗子,顺便用ps告诉你,转置对矩阵进行了什么操作。
反折+旋转,就可以得到转置矩阵了。
重要性质:
1)矩阵转置的转置等于原矩阵:
2)矩阵相乘(也叫串接)的转置,等于矩阵反向相乘(反响串接)各个矩阵的转置:
4,逆矩阵
不是所有矩阵都有逆矩阵,必须满足下列条件
1)必须是方阵(行列数一样)
2)行列式不为0,非奇异矩阵
入门精要中并没有讨论如何手动求逆,据说是十分复杂,那在这里我们也不必去讨论了,真要是求逆,程序提供的算法会帮我们自动完成。
重要性质:
1)
2)
3)
4)
5)
6)有向量
运算率:
1)*
2)结合律 :
3)分配律(分左右两部分):
4)和常数相乘:
5,特殊矩阵
方阵(行列数都相等的矩阵)
1) 逆矩阵(上文已经提到,逆矩阵属于方阵下面的子集)
2) 对角矩阵
一个矩阵如果除了对角线之外,其他元素都为0,那么我们称这个矩阵为对角矩阵
(1)普通对角矩阵
(2)单位矩阵
单位矩阵就是矩阵界的“1”。它的性质和地位都和常数里的“1”类似。比如任何矩阵和单位矩阵相乘都等于这个矩阵本身。
3)正交矩阵
如果
公式一般都会看的一脸懵逼,但是举个栗子就懂了。
在正交矩阵中,向量
正交矩阵还有一个很重要的性质是:
也就是说,正交矩阵的转置 ==它的逆矩阵。
这个有啥用呢?首先明确一下,在计算机运算中,求逆的运算量远远大于转置,shader因为是游戏中需要实时跑的东西,对性能的要求极高。所以,在shader计算中,能用转置就别求逆。一旦你确定你的矩阵是个正交矩阵,你又需要用它的逆矩阵,那么,对这个矩阵转置即可。省了很多性能,并且结果一致。
矩阵的东西目前就记录到这里,比较浅显(以后有需要了再深入)。下一篇讲一讲渲染流程和unity内置矩阵的应用。