OpenAL代表開(kāi)放音頻庫(kù)(Open Audio Library),是一個(gè)強(qiáng)大的開(kāi)源庫(kù)?!渡姹?BioShock)》、《雷神之錘4(Quake 4)》、《毀滅戰(zhàn)士3(Doom III)》和《虛幻(Unreal)》等游戲都使用了這個(gè)音頻庫(kù)。它采用OpenGL作為模型,具有相同的狀態(tài)機(jī)風(fēng)格的設(shè)計(jì)和擴(kuò)展方法。
SDL(Simple DirectMedia Layer)是一個(gè)跨平臺(tái)的庫(kù),支持輸入、聲音和圖形。SDL在游戲開(kāi)發(fā)商中非常流行,在獨(dú)立或者開(kāi)源游戲中使用得尤其多。使用SDL開(kāi)發(fā)的最著名的開(kāi)源游戲之一是FreeCiv,它是《文明(Civilization)》的一個(gè)聯(lián)機(jī)版本。多數(shù)Linux游戲端口中也使用了SDL。
PhysFs初看起來(lái)可能是一個(gè)物理庫(kù),但是實(shí)際上卻是一個(gè)小型的IO庫(kù)。它可以將全部游戲資源打包為一個(gè)較大的二進(jìn)制文件,或者幾個(gè)小的二進(jìn)制文件。許多商業(yè)游戲都有類(lèi)似的系統(tǒng),例如《毀滅戰(zhàn)士(Doom)》的wad系統(tǒng)或《雷神之錘(Quake)》的pak系統(tǒng)。它可以使游戲在發(fā)布后的修改和更新變得更加簡(jiǎn)單。
FreeGLUT是OpenGL實(shí)用程序工具包的免費(fèi)版本。這個(gè)庫(kù)中的函數(shù)可以讓用戶馬上就能夠使用OpenGL。它還有從鍵盤(pán)和鼠標(biāo)接受輸入的方法,以及繪制各種基本形狀的方法,例如球形、立方形,甚至茶壺形(這個(gè)茶壺在計(jì)算機(jī)圖形學(xué)中非常有名,它是由Martin Newell在猶他大學(xué)求學(xué)期間進(jìn)行建模的。茶壺是一個(gè)非常復(fù)雜的表面,所以在測(cè)試新的圖形技術(shù)時(shí)非常有用。動(dòng)畫(huà)電影《玩具總動(dòng)員》中就有一個(gè)典型的茶壺模型,DirectX甚至有自己的茶壺創(chuàng)建方法D3DXCreateTeapot( )。在講授OpenGL時(shí)經(jīng)常用到FreeGLUT,但是它的功能很有限,很少用于真正的項(xiàng)目。
ODE(Open Dynamics Engine)是一個(gè)可以用在多個(gè)平臺(tái)上的物理引擎,可以完成碰撞檢測(cè)和剛體模擬。PC上的第一人稱(chēng)射擊游戲《潛行者(S.T.A.L.K.E.R)》中就使用了ODE。Glfw是可以通過(guò)Tao使用的第三個(gè)可移植的OpenGL包裝器。Glfw代表OpenGL框架(OpenGL framework),它的目的是擴(kuò)展GLUT提供的功能。如果不想使用SDL,但又確實(shí)想使用框架來(lái)訪問(wèn)OpenGL,就可以考慮使用Glfw。
DevIL(Developer's Image Library)是一個(gè)從磁盤(pán)加載紋理到OpenGL中的庫(kù)。DevIL與OpenGL有些類(lèi)似,因?yàn)樗彩且粋€(gè)狀態(tài)機(jī),并且有類(lèi)似的方法名稱(chēng)。DevIL是跨平臺(tái)的,支持多種(43種)不同的圖片格式。Cg是本章前面提到的一種著色器語(yǔ)言。通過(guò)使用Tao.Cg,可以從文本文件或字符串中加載著色器程序,進(jìn)行處理,然后在OpenGL中使用。
Lua可能是游戲開(kāi)發(fā)中最流行的腳本語(yǔ)言。它是一種小型的、易于嵌入的語(yǔ)言,表達(dá)力非常強(qiáng)。使用Tao.Lua可以在腳本和C#程序之間傳遞函數(shù)和數(shù)據(jù)。Tao.FreeType是一個(gè)基本的字體包,可以將FreeType類(lèi)型的字體轉(zhuǎn)換成一幅位圖。它的接口簡(jiǎn)單易用。
Tao提供的最后一個(gè)庫(kù)是FFmpeg,這個(gè)名稱(chēng)由MPEG(一個(gè)視頻標(biāo)準(zhǔn))和FF(Fast Forward,快進(jìn))組成。它提供了一種播放視頻的方式。如果想要在游戲中使用過(guò)場(chǎng)動(dòng)畫(huà),F(xiàn)Fmpeg是一個(gè)不錯(cuò)的選擇。
Tao提供的所有庫(kù)都是完全開(kāi)源的。其中的多數(shù)庫(kù)都可以免費(fèi)用在商業(yè)項(xiàng)目中,但還是有必要閱讀許可證中列出的具體說(shuō)明。Tao是一個(gè)出色的程序包,剛開(kāi)始涉足游戲的開(kāi)發(fā)商可以把它作為一個(gè)起點(diǎn)。對(duì)每個(gè)庫(kù)的介紹不在本書(shū)的討論范圍之內(nèi),我們將只關(guān)注其中最重要的那些庫(kù)。從第5章開(kāi)始,我們將使用OpenGL和Tao.Platform.Windows庫(kù)。第6章將討論DevIL。第9章將討論使用OpenAL播放聲音,以及使用SDL處理手柄輸入。每個(gè)庫(kù)都很有用,所以很有必要花些時(shí)間研究每個(gè)感興趣的庫(kù)。
2.5 小結(jié)
OpenGL和DirectX3D是業(yè)界使用的兩個(gè)主要的圖形庫(kù)。這些圖形庫(kù)是與底層的圖形硬件進(jìn)行通信的標(biāo)準(zhǔn)方式。圖形硬件通常包含幾個(gè)標(biāo)準(zhǔn)部分,在把3D頂點(diǎn)信息轉(zhuǎn)換為屏幕上顯示的2D幀時(shí)非常高效。這種從3D頂點(diǎn)到2D幀的轉(zhuǎn)換被稱(chēng)為圖形流水線。圖形流水線分為兩種:不可以編程的固定流水線和可以編程的流水線,后者允許通過(guò)著色器程序控制流水線的特定階段。
Tao框架是一個(gè)實(shí)用庫(kù)的集合,其中包括OpenGL。C#可以通過(guò)Tao框架使用OpenGL編寫(xiě)游戲。Tao框架還包含其他幾個(gè)對(duì)游戲開(kāi)發(fā)很有幫助的庫(kù)。本書(shū)中將結(jié)合使用OpenAL、DevIL和SDL來(lái)開(kāi)發(fā)一個(gè)簡(jiǎn)單的橫向卷軸射擊游戲。