董佳駒+詹玲超+秦興杰+王坡
摘 要:DirectX庫不只是圖形的API函數(shù),也是實現(xiàn)多用途的API函數(shù),在此基礎上借鑒Unity引擎組件+對象框架的模式設計了一款基于DirectX庫的游戲引擎。該文的主要工作是引擎組件和對象的實現(xiàn)。引擎組件主要包括渲染組件、物理組件和動畫組件,其中渲染組件從變換、網(wǎng)格和材質(zhì)3個方面實現(xiàn)。引擎對象包括三大系統(tǒng),分別是攝像機系統(tǒng)、地形系統(tǒng)和光照系統(tǒng)。這樣就實現(xiàn)了一個游戲引擎。
關(guān)鍵詞:DirextX庫 游戲引擎 組件對象
中圖分類號:TP393 文獻標識碼:A 文章編號:1672-3791(2017)02(c)-0008-02
DirectX庫是微軟針對Windows操作系統(tǒng)的非實時性推出的一個開發(fā)庫,目的是讓圖形圖像、動畫、多媒體和游戲程序開發(fā)人員在Windows開發(fā)環(huán)境下很容易地編制高級程序。該游戲引擎就是基于該庫設計制造的。一個游戲就如同一輛汽車,是由一個個的零部件拼接組裝而成。而游戲引擎和游戲是部分對整體的關(guān)系,就如同汽車的發(fā)動機一樣,是一個不可或缺的載體。游戲引擎借鑒了Unity引擎組件+對象的框架模式。該框架的主要特點是用一個對象來表示三維空間中的位置。該框架的最大亮點是實現(xiàn)腳本模塊。有了這樣的框架就能進行引擎組件和對象的實現(xiàn)。組件主要分為渲染組件、物理組件動畫組件,對象包含攝像機、地形以及光照。
1 引擎組件
引擎組件是實際功能的承載者,是整個代碼的核心。這里按照功能分類,分別為渲染組件、物理組件和動畫組件。
1.1 渲染組件
渲染組件主要由變換、網(wǎng)格和材質(zhì)來承載。在游戲里方位是一個重要的屬性,方位包含物體的位置、方向和大小,主要依靠幾何坐標變換來實現(xiàn),變換由平移、旋轉(zhuǎn)和縮放構(gòu)成,每一個變換可以由一個矩陣來表達和計算,這就是變換組件的實現(xiàn)。
在游戲里,物體模型是通過多邊形網(wǎng)格來逼近表示,網(wǎng)格模型文件可以將物體輪廓的頂點位置、紋理和材質(zhì)等存儲在一個外部文件中。但是網(wǎng)格模型可能包含一些冗余的數(shù)據(jù),就有必要通過算法對網(wǎng)格模型進行優(yōu)化,刪除一些多余的信息。從外部文件中通過網(wǎng)格組件加載并渲染該網(wǎng)格是該組件的主要作用,這就是網(wǎng)格組件的實現(xiàn)。
還有,材質(zhì)也是物體的一個重要屬性,材質(zhì)決定物體能夠反射哪些顏色的光線。在DirectX庫中有一個結(jié)構(gòu)體記錄物體表面材質(zhì)屬性,該結(jié)構(gòu)體包含4個參數(shù),物體頂點顏色的亮度就由這4個參數(shù)來決定,其計算公式是:物體的最終顏色=物體反射環(huán)境率+物體反射漫反射率+物體反射鏡面反射率+自發(fā)光,這就是材質(zhì)組件的實現(xiàn)。
1.2 物理組件
物理組件主要是實現(xiàn)外力效果、摩擦力效果、反彈效果和碰撞等其他物理效果。在物理模塊中,通過聲明Physics Effect類作為物理組件類,其構(gòu)造函數(shù)初始化相關(guān)數(shù)據(jù)。通過該類生成很多效果函數(shù),方便調(diào)用。
1.3 動畫組件
動畫之所以能動起來是因為有數(shù)據(jù)記錄了每個時間點物體網(wǎng)格各個頂點所在的具體位置,通過插值算法計算兩個網(wǎng)格頂點的位置,實現(xiàn)網(wǎng)格的平滑移動,在60幀及以上的幀率下就能看到一個會動的網(wǎng)格,這就是該引擎的動態(tài)顯示原理。在動畫組件中聲明Animation Effect類作為動畫組件類,其構(gòu)造函數(shù)初始化相關(guān)函數(shù)。
2 引擎對象
這里主要分為3個系統(tǒng),分別為攝像機系統(tǒng)、地形系統(tǒng)和光照系統(tǒng)。
2.1 攝像機系統(tǒng)
在攝像機系統(tǒng)中,首先需要實現(xiàn)出取景變換矩陣。其核心思想是:確定攝像機對象的方位。根據(jù)攝像機的方位計算出其方位矩陣并通過計算來獲得取景變換矩陣。取景變換本質(zhì)是解決如何以攝像機作為新的坐標原點來表示原來三維世界中物體坐標的問題。換一種方式就是說坐標系中的物體需要隨著攝像機一起進行方位變換,來達到攝像機自身坐標系與世界坐標系完全重合的目的,如圖1所示。
2.2 地形系統(tǒng)
在三維世界里,地形是一個非常重要的元素。沒有光照,沒有大地,沒有各種生物,就不能稱之為世界。在討論地形系統(tǒng)的實現(xiàn)原理前,先看圖2的幾張圖。
可以發(fā)現(xiàn)上面這三張圖似乎存在著某種關(guān)聯(lián)。首先在圖2(a)上可以看到,一個個網(wǎng)格頂點有規(guī)律的排列著,這里每個點都可以用二維坐標(x,y)來表示。而圖2(b)則在圖2(a)的基礎上增加了高度這個屬性,可以說圖2(a)是平面的,而在圖2(b)上每個點在原來的方位上有了不同的高度,這時每個點可以用三維坐標(x,y,z)來表示,這樣就把一張二維的圖變成了一張三維的圖,地形便出來了。而圖2(c)則在第二張圖的基礎上添加了紋理圖片,這樣一個逼真的地形就顯示出來了。
2.3 光照系統(tǒng)
計算機所描繪的三維世界作為現(xiàn)實世界的高度逼真的模仿,必然需要光照系統(tǒng)。在光照系統(tǒng)中可以使用光照功能,只需要告訴光照系統(tǒng)需要使用什么類型的光照,而不用為物體的每個網(wǎng)格頂點都指定顏色值,然后調(diào)用DirectX庫的光照設置函數(shù),該函數(shù)就會根據(jù)其內(nèi)置的算法計算出每個頂點的顏色值,從而產(chǎn)生出逼真的光照效果。
3 結(jié)語
游戲引擎只是游戲的一個“零部件”,是一個游戲的載體。游戲的渲染和實現(xiàn)都是基于這個載體之上。真正創(chuàng)建出一個3D游戲世界,還需要使用Windows編程編寫Windows應用程序,讓三維世界有一個可以被呈現(xiàn)的載體。通過該游戲引擎所創(chuàng)建的三維世界,還是需要編寫簡單的代碼產(chǎn)生程序窗口,并通過該游戲引擎來創(chuàng)建一個簡單的三維世界。
參考文獻
[1] Jason Gregory.游戲引擎架構(gòu)[M].北京:電子工業(yè)出版社,2014.
[2] Frank D Luna.DIRECTX 9.0 3D游戲開發(fā)編程基礎[M].北京:清華大學出版社,2012.
[3] Jim Adams.DirectX高級動畫制作[M].重慶:重慶大學出版社,2013.