8.5.4 平移和缩放
平移是一个非常简单的操作。向量的最后一行是对象的原点,平移操作将使用这一行。创建一个矩阵来修改平移时,只需要修改单位矩阵的最后一行。平移矩阵如下所示。
其代码也很简单。
public void SetTranslation(Vector translation)
{
_m41 = translation.X;
_m42 = translation.Y;
_m43 = translation.Z;
}
public Vector GetTranslation()
{
return new Vector(_m41, _m42, _m43);
}
缩放矩阵理解起来也很简单。记住,每一行代表一个轴。可以把矩阵的第一行看作一个向量。这个向量是被缩放对象的X轴,Xx维度越大,在X轴方向上缩放得也越大。第二行是Y轴,第三行是Z轴,它们也可以被看作向量。如果每个向量的长度都为2,那么将沿着每个轴均匀地缩放对象。
public void SetScale(Vector scale)
{
_m11 = scale.X;
_m22 = scale.Y;
_m33 = scale.Z;
}
public Vector GetScale()
{
Vector result = new Vector();
result.X = (new Vector(_m11, _m12, _m13)).Length();
result.Y = (new Vector(_m21, _m22, _m23)).Length();
result.Z = (new Vector(_m31, _m32, _m33)).Length();
return result;
}
缩放也可以是非均匀缩放,在某个轴上缩放的程度可能比其他轴上缩放的程度更大。为了找出在某个轴上的缩放程度,只需取出相应的行并把它转换成一个向量,然后应用向量的求长度操作,得到的结果就是缩放的量。