8.5.4 平移和縮放
平移是一個(gè)非常簡單的操作。向量的最后一行是對象的原點(diǎn),平移操作將使用這一行。創(chuàng)建一個(gè)矩陣來修改平移時(shí),只需要修改單位矩陣的最后一行。平移矩陣如下所示。
其代碼也很簡單。
public void SetTranslation(Vector translation)
{
_m41 = translation.X;
_m42 = translation.Y;
_m43 = translation.Z;
}
public Vector GetTranslation()
{
return new Vector(_m41, _m42, _m43);
}
縮放矩陣?yán)斫馄饋硪埠芎唵?。記住,每一行代表一個(gè)軸??梢园丫仃嚨牡谝恍锌醋饕粋€(gè)向量。這個(gè)向量是被縮放對象的X軸,Xx維度越大,在X軸方向上縮放得也越大。第二行是Y軸,第三行是Z軸,它們也可以被看作向量。如果每個(gè)向量的長度都為2,那么將沿著每個(gè)軸均勻地縮放對象。
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;
}
縮放也可以是非均勻縮放,在某個(gè)軸上縮放的程度可能比其他軸上縮放的程度更大。為了找出在某個(gè)軸上的縮放程度,只需取出相應(yīng)的行并把它轉(zhuǎn)換成一個(gè)向量,然后應(yīng)用向量的求長度操作,得到的結(jié)果就是縮放的量。