正文

游戲數(shù)學(xué)(37)

精通C#游戲編程 作者:(英)斯庫勒


 

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é)果就是縮放的量。


上一章目錄下一章

Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號