顶点着色器的最基本功能就是把模型的顶点坐标从模型空间转换到齐次裁剪坐标空间。
想要将一个点从一个坐标空间转换到另一个坐标空间就需要利用坐标空间的变换。
想要定义一个坐标空间,必须指明坐标原点和三个坐标轴的方向。
每一个坐标空间都有一个父坐标空间,对坐标空间的变换实际上就是在父空间与子空间对点和矢量进行变换。而变换则是利用矩阵将一些点、颜色等进行转换的过程。
空间坐标的变换就是利用矩阵将一个坐标空间的点变换到另一个坐标空间。
如何表示空间坐标变换矩阵呢?
首先,定义父坐标空间P以及一个子坐标空间C。其次,还知道父坐标空间中子坐标空间的原点以及三个单位坐标轴。
一般的需求:
其公式表达为:
其中, Mc−p 表示的是从子坐标空间变换到父坐标空间的变换矩阵,而 Mp−c 是其逆矩阵。
若我们知道子坐标空间C的三个坐标轴在父坐标空间P下的表示 xc,yc,zc 以及原点位置 Oc 。
当给定一个子坐标空间中的一点 Ac=(a,b,c) ,那么可以通过四个步骤来确定其在父坐标空间下的位置 Ap 。
其结果就是:
将其矩阵化就是:
将结果进一步扩展到齐次坐标空间中就是:
由此可以进一步得到 Mc−p 变换矩阵:
可以很明显的看出来,变换矩阵 Mc−p 实际上可以通过坐标空间C在坐标空间P中的原点和坐标轴矢量表示构建出来,将三个坐标轴依次放入矩阵的前三列,把原点矢量放到最后一列,再用0和1填充最后一行。
另一个角度,若已知从模型空间到世界空间的4X4变换矩阵 Mc−p ,可以提取出它的第一列再进行归一化(消除缩放的影响)来得到模型空间的x轴在世界空间下的单位矢量表示。同样的方法可以提取y轴与z轴。
可以知道矩阵 Mc−p 的逆矩阵为 Mp−c ,当矩阵 Mc−p 是个正交矩阵 - 一个方阵M和它的转置矩阵的乘积是单位矩阵,那么 Mc−p 的逆矩阵就是等于它的转置矩阵。
再进一步理解一下这个公式。
已知矩阵 Mc−p :
那么其转置矩阵就是 MTc−p :
此外,还知道矩阵 Mp−c 是:
那么就有:
根据以上这些公式,就可以推论出:
如果我们知道坐标空间变换矩阵 MA−B 是一个正交矩阵, 那么我们就可以提出他的第一列来得到坐标空间A的x轴在坐标空间B下的表示, 还可以提取它的第一行来得到坐标空间B的x轴在坐标空间A下的表示。
若我们知道坐标空间B的x轴、y轴、z轴在坐标空间A下的表示,将其依次放入矩阵的每一行就可以得到A到B的变换矩阵了。
以上虽然看上去很复杂,但是只要多看几遍,多写几遍都能理解其含义了。