可以用单个矩阵对点、线、多边形和其他几何图形进行一致性变换。除此之外,还可以对线或多边形表面上的向量进行变换,但是却无法对表面法线(也可以是顶点的光照法线)这样一个非常重要的几何特征性进行变换。法线必须通过用来变换几何图形的逆矩阵的转置矩阵进行变换。因此,如果变换几何图形的矩阵为M,那么必须用下面的矩阵N来变换该几何图形的法线:
N = (M-1)T
下图给出了一个多边形(前视图)沿X轴缩放0.5倍时没有正确使用相应变换时可能出现的情形。
该缩放变换的变换矩阵为
0.5 0 0 0
M = 0 1 0 0
0 0 1 0
0 0 0 1
四边形缩放后(此处为了简化只考虑AB)的点为(0, 2, 0, 1)(2, 0, 0, 1);AB的法线原始向量为(1, 1, 0, 0)如果将该向量直接与转换矩阵M相乘后得到的向量为(0.5, 1, 0, 0),就得到上图中不正确的形式,从图中也可看出,向量CD不是AB的法线。按照上面描述,此时法线的转换矩阵为用来变换几何图形的逆矩阵的转置矩阵,也即法线的转换矩阵为
2 0 0 0
N = 0 1 0 0
0 0 1 0
0 0 0 1
将原始法向量(1 1 0 0)和该转换矩阵相乘得到正确的转换后的法向量为(2 1 0 0),如上图正确类型。
在实际应用中,如果变换矩阵是正交的(例如通过旋转形成的矩阵),就没必要计算该矩阵的逆矩阵。在这种情况下,正交矩阵的逆矩阵就是其转置矩阵,可以用这个矩阵本身对法线进行变换。这是因为两个转置相互抵消,得到的结果依然是原先的旋转矩阵。此外,由于平移不影响向量方向,可以进行任意次数的平移而不对法线产生任何影响。变换之后,可以避免对法线再次归一化(也就是使其长度重新为1),这是因为由旋转和平移两种变换所形成的矩阵(刚性变换)不影响几何图形的长度。由此可见,可以用几何图形的变换矩阵对法线进行变换。
另外,如果使用一个或者多个一致性缩放矩阵(也就是X,Y,Z轴缩放因子相同)进行变换,就不需要计算相应的法线转换矩阵而是直接使用几何图形的转换矩阵,因为这种缩放只影响变换后的法线长度,而不影响其方向。在这种情况下,当矩阵变换对法线进行变换后,需要对法线进行归一化。如果变换过程的整体缩放因子是已知或者很容易得到,就可以直接用它来归一化法线。例如,如果经过一系列缩放变换的最终缩放系数为5.2,那么可以用法线变换结果与5.2相除,即可实现法线归一化。