8.5.2 單位矩陣
單位矩陣是這樣的一種矩陣:當(dāng)將它與另外一個(gè)矩陣相乘時(shí),它不會(huì)修改那個(gè)矩陣。數(shù)字1是實(shí)數(shù)中的一個(gè)單位,將任何數(shù)值與1相乘都會(huì)得到原來(lái)的數(shù)值。
單位矩陣是方陣。下面是3×3矩陣和4×4矩陣的單位矩陣。
創(chuàng)建一個(gè)矩陣操作時(shí),單位矩陣是一個(gè)絕佳的起點(diǎn)。對(duì)模型應(yīng)用單位矩陣時(shí),頂點(diǎn)不會(huì)發(fā)生改變,所以只有在單位矩陣之上執(zhí)行的操作才會(huì)得到執(zhí)行。如果對(duì)任何模型應(yīng)用全零矩陣,該模型將會(huì)消失,所有的頂點(diǎn)都將縮減為一個(gè)奇點(diǎn),就像黑洞那樣。矩陣類(lèi)應(yīng)該默認(rèn)被初始化為單位矩陣。
將如下定義添加到矩陣類(lèi)中。
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;
}