正文

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

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


 

新添加的這些函數(shù)使得程序員可以根據(jù)需要旋轉(zhuǎn)和縮放精靈。它們的開銷更高一些,但是把這些函數(shù)轉(zhuǎn)移到3D模型中很簡(jiǎn)單??梢詫?duì)這些函數(shù)進(jìn)行整理和縮減,以獲得性能提升。

8.5.9  優(yōu)化

將注意力放到游戲上,只在必要時(shí)進(jìn)行優(yōu)化,這一點(diǎn)十分重要。對(duì)于大多數(shù)游戲,Matrix類已經(jīng)足夠快,但是程序員都很喜歡進(jìn)行優(yōu)化,下面就此給出了一些提示。矩陣涉及大量運(yùn)算,所以減少矩陣的使用量一般來說是一個(gè)好主意。優(yōu)化程度最高的代碼是從不會(huì)運(yùn)行的代碼。

現(xiàn)在,每個(gè)精靈由兩個(gè)三角形組成,總共有6個(gè)頂點(diǎn),但是實(shí)際上,用4個(gè)頂點(diǎn)就可以創(chuàng)建一個(gè)精靈。在這一方面,一個(gè)不錯(cuò)的起點(diǎn)是查閱OpenGL文檔中的索引緩沖區(qū)函數(shù)。

現(xiàn)代CPU使用專門的硬件SIMD(Single Instruction, Multiple Data,單指令多數(shù)據(jù))來執(zhí)行矩陣和向量運(yùn)算。SIMD指令會(huì)顯著增加矩陣計(jì)算的速度。但是,在編寫本書時(shí),只有C#的Mono實(shí)現(xiàn)支持SIMD操作。

大多數(shù)測(cè)試程序都會(huì)在調(diào)試模式下生成,發(fā)布模式要快得多。如果在Solution Explorer中右擊項(xiàng)目名稱并在彈出的快捷菜單中選擇Properties命令,還可以使用其中的一個(gè)選項(xiàng)來打開優(yōu)化。

垃圾回收是使C#比C++這樣的語言更慢的一項(xiàng)特性。避免垃圾回收導(dǎo)致速度變慢的最佳方式是減少主循環(huán)中創(chuàng)建的對(duì)象數(shù)量。每當(dāng)使用關(guān)鍵字new時(shí),就創(chuàng)建了一個(gè)對(duì)象。最好是在構(gòu)造函數(shù)中創(chuàng)建對(duì)象一次,或者將對(duì)象定義為某個(gè)對(duì)象的成員,而不是在處理循環(huán)或者渲染循環(huán)中創(chuàng)建它。

一些矩陣操作會(huì)創(chuàng)建矩陣。這使得它們更加易于使用,對(duì)象創(chuàng)建也被優(yōu)化了,但是還可以使它們更加高效。在調(diào)試時(shí),右擊窗口后在彈出的快捷菜單中有一個(gè)命令Go to Disassembly。這會(huì)顯示每一行C#代碼生成的IL(intermediate Language,中間語言)。IL指令數(shù)越少,代碼運(yùn)行得越快,前提是發(fā)布生成優(yōu)化沒有移除這些IL指令。遺憾的是,反匯編中不會(huì)顯示編譯器執(zhí)行的任何優(yōu)化。


上一章目錄下一章

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