8.5.2 单位矩阵
单位矩阵是这样的一种矩阵:当将它与另外一个矩阵相乘时,它不会修改那个矩阵。数字1是实数中的一个单位,将任何数值与1相乘都会得到原来的数值。
单位矩阵是方阵。下面是3×3矩阵和4×4矩阵的单位矩阵。
创建一个矩阵操作时,单位矩阵是一个绝佳的起点。对模型应用单位矩阵时,顶点不会发生改变,所以只有在单位矩阵之上执行的操作才会得到执行。如果对任何模型应用全零矩阵,该模型将会消失,所有的顶点都将缩减为一个奇点,就像黑洞那样。矩阵类应该默认被初始化为单位矩阵。
将如下定义添加到矩阵类中。
public static readonly Matrix Identity =
new Matrix(new Vector(1, 0, 0),
new Vector(0, 1, 0),
new Vector(0, 0, 1),
new Vector(0, 0, 1));
public Matrix() : this (Identity)
{
}
public Matrix(Matrix m)
{
_m11 = m._m11;
_m12 = m._m12;
_m13 = m._m13;
_m21 = m._m21;
_m22 = m._m22;
_m23 = m._m23;
_m31 = m._m31;
_m32 = m._m32;
_m33 = m._m33;
_m41 = m._m41;
_m42 = m._m42;
_m43 = m._m43;
}
public Matrix(Vector x, Vector y, Vector z, Vector o)
{
_m11 = x.X; _m12 = x.Y; _m13 = x.Z;
_m21 = y.X; _m22 = y.Y; _m23 = y.Z;
_m31 = z.X; _m32 = z.Y; _m33 = z.Z;
_m41 = o.X; _m42 = o.Y; _m43 = o.Z;
}