游戏数学(37)

 

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;

}

缩放也可以是非均匀缩放,在某个轴上缩放的程度可能比其他轴上缩放的程度更大。为了找出在某个轴上的缩放程度,只需取出相应的行并把它转换成一个向量,然后应用向量的求长度操作,得到的结果就是缩放的量。

读书导航