无论是经典的光栅化渲染管线还是光线追踪算法,都离不开对物体的几何变换。几何变换的本质是是对顶点位置或者向量方向的改变,其实对于向量方向也可以等效看做是从原点出发,向量末端顶点位置的变化,所以归根到底是对顶点位置的变化。一个物体由很多个顶点构成,所做的几何变换往往不是针对某一个顶点进行的,而是针对一组顶点进行的。对于单个顶点,本质上只涉及空间位置的移动,但对于构成一个物体的多个顶点而言,除了所有顶点按相同方向,相同距离进行移动,即平移变换外,还会涉及这些顶点相互间位置关系的变化。通常情况下,变换时还需要保持物体形状的相似性。因而还产生了缩放变换。在物理世界中,一个物体存在六个自由度,其中三个自由度是位置自由度,另外三个自由度是旋转自由度,即还需确定物体相对于三个两两正交的坐标轴的旋转角度,才能最终确定物体的空间存在方式。对于模拟物理世界的计算机图形学,也不例外。对于物体的变换,就相应地提出了旋转变换,即相对于某个轴的旋转变换。使用最多的是关于x、y、z轴的旋转变换,当然在很多场合下,也会考虑相对于任意轴的旋转变换问题。综上所述,计算机图形学中的所需的几何变换包括了平移变换,缩放变换和旋转变换。其他一些变换基本上都可以使用这些变换的组合的到。
在计算机图形学中顶点的位置可以表示为一个三维列向量或三维行向量,且一般会使用行向量的表现形式。对于平移变换,相对于原点的缩放运算以及相对于x、y、z轴的旋转变换,都可以直接写出变换后的行向量。对于平移变换,行向量的各坐标分量进行了加法运算,对于缩放运算,行向量的各坐标分量进行了乘法运算,对于旋转运算,行向量的各坐标分量先进行了乘法运算,再进行了加法运算。对于后两种变换,根据新旧行向量各分量的关系,可以将变换转化为行向量右乘3*3矩阵的形式。而对于平移变换,右乘3*3矩阵则无法实现。由于矩阵运算可以连续进行,通过连续的矩阵运算,就可以很容易实现连续的几何变换,因而还是希望能够使用矩阵运算的形式实现平移变换。经过反复尝试,人们发现局限在3*3的矩阵运算不能实现,但可以增加矩阵的维度和行向量的维度。增加行向量的维度最简单的方式是在三维坐标后,增加一维坐标,而这个坐标永远为1.此时,矩阵也需要增加维度,编程4*4的矩阵。这个矩阵第四行的前三项将用来满足平移变换的表达式,而新增加的最后一列,即一个四维列向量,只在最后一个元素处置1,其他位置均为0.这种设置,目的就是为了使得变换后的行向量第四维坐标仍保持为1.平移变换使用四维矩阵后,旋转变换和缩放变换使用的矩阵相应地变为4*4形式,且新增加的元素也只是在第四行第四列处置1,其他位置均为0.以保证不改变行向量前三位变换的效果,并保证行向量最后一位永远为1.基于上述所有考虑,最终就将三种基本变换,变成行向量右乘4*4矩阵运算的形式,便于计算机的编程实现和复杂变换的扩展。