正文

游戲數(shù)學(38)

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


 

8.5.5  旋轉

圍繞任意一個軸進行旋轉的數(shù)學算法比前面介紹的要復雜得多。知道旋轉的具體工作原理并不重要,重要的是知道旋轉的結果。旋轉矩陣由一個軸u和一個標量值(θ)構成,其中u被定義為一個歸一化向量,而θ用弧度作為單位描述了旋轉量。如果想要旋轉的模型是一個瓶塞,那么歸一化向量u可以用一個穿過瓶塞的針表示。角度(θ)代表針的旋轉量,針的旋轉會帶動瓶塞的旋轉。

public void SetRotate(Vector axis, double angle)

{

double angleSin = Math.Sin(angle);

double angleCos = Math.Cos(angle);

double a = 1.0 - angleCos;

double ax = a * axis.X;

double ay = a * axis.Y;

double az = a * axis.Z;

_m11 = ax * axis.X + angleCos;

_m12 = ax * axis.Y + axis.Z * angleSin;

_m13 = ax * axis.Z - axis.Y * angleSin;

_m21 = ay * axis.X - axis.Z * angleSin;

_m22 = ay * axis.Y + angleCos;

_m23 = ay * axis.Z + axis.X * angleSin;

_m31 = az * axis.X + axis.Y * angleSin;

_m32 = az * axis.Y - axis.X * angleSin;

_m33 = az * axis.Z + angleCos;

}

如果在一幀中多次使用正弦和余弦函數(shù),開銷是很大的,因此,代碼中將它們的使用降到了最低。軸向量應該被歸一化,但是SetRotate中沒有對此進行檢查。


上一章目錄下一章

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