图8-21使用3个轴向量和一个位置向量(原点)来表示矩阵。XxXyXz描述了x向量,YxYyYz描述了y向量,ZxZyZz描述了z向量,OxOyOz描述了原点向量。这些向量是模型的轴及其原点。可以使用它们来快速确定对象的位置以及对象在X、Y和Z轴上面对的方向。如果所有的轴都被归一化,那么对象不被缩放;如果轴的长度都为2,那么对象被放大到原来的两倍。这种可视化的思考矩阵的方法使得它们更易于使用。
图8-21中的最后一列是[0,0,0,1]。这个列中的值不会改变,它们只在计算投影(从3D空间变换到2D空间)时使用。这种投影操作不太常见,所以我们将使用的矩阵为4×3矩阵。最后一列将始终为[0,0,0,1]。
在介绍矩阵操作之前,先创建一个基本的类。
public class Matrix
{
double _m11, _m12, _m13;
double _m21, _m22, _m23;
double _m31, _m32, _m33;
double _m41, _m42, _m43;
}
这个Matrix类是一个4×3矩阵。它的成员变量的分布方式与图8-18类似,但是没有第4列(我们知道第4列总是[0,0,0,1],所以不需要存在这几个值)。Vector、Color和Point都是结构,但是Matrix是一个更大的结构,所以把它声明成了一个类。
在下面的小节中,我们将为Matrix类添加各种操作。