正文

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

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


 

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

8.5.9  優(yōu)化

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

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

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

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

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

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


上一章目錄下一章

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