秦興杰++王坡++董佳駒++詹玲超
摘要:針對DirectX庫只有渲染功能,并且該庫作為渲染庫并不具有游戲引擎中所需要的各種功能。所以在DirectX庫的基礎上將其應用程序的編程接口封裝到各個游戲引擎渲染組件里,使該引擎更好的發揮DirectX庫的渲染功能。因為動畫組件和功能組件與DirectX庫的關系不大,本文的主要工作在引擎的框架和接口設計上。接口就是編程接口,框架借鑒了unity引擎組件+對象的模式,以此來實現一個功能完善、執行效率高的基于DirectX庫的游戲引擎。
關鍵詞:游戲引擎 DirectX庫 框架 接口
中圖分類號:TP391.3 文獻標識碼:A 文章編號:1007-9416(2016)12-0182-01
Abstract:The DirectX library only has rendering functions, and the library does not have all the functions needed in the game engine. On the basis of the DirectX library, the application programming interface will be packaged to the various game engine rendering components, so that the engine will play DirectX library rendering function better. Animation component and function component have little relationship with the DirectX library, the main work of this paper is on the frame of the engine and the design of the interface. Interface is the programming interface. Framework draws on the model of the unity engine component + object. So to complete and achieve a game engine based on DirectX with perfect function and high execution efficiency
Key Words:game engine;DirectX library;framework;interface
隨著游戲產業的發展,其所依賴的游戲引擎也變的越來越重要。游戲引擎為游戲的開發提供了關鍵的技術框架。一款優秀的游戲引擎能夠極大地提高游戲的開發效率和游戲的健壯性。為此掌握游戲行業的核心技術,降低游戲行業的門檻,加強對于游戲引擎核心技術的研究,學習并開發一個全功能的、簡單的游戲引擎就顯得非常有必要。本文基于DirectX庫的游戲引擎的開發提出了一套系統的框架和接口設計。在研究比較了許多成熟的游戲引擎后,最后借鑒了Unity引擎的組件+對象的框架模式。只有好的框架還遠遠不夠,為了保證游戲引擎內容數據和接口的隱藏性,同時保證游戲引擎的可拓展性,設計了動態連接庫式的接口。
1 DirectX開發庫介紹
DirectX是微軟公司針對Windows操作系統的非實時性而推出的一個開發庫,目的是讓圖形圖像、動畫、多媒體和游戲程序開發人員在Windows環境下很容易地編制高級程序。DirectX包含許多功能,應用程序可以通過使用DirectX API來訪問這些新功能。DirectX包含一組API函數,通過它能訪問高性能硬件的高級功能,如三維圖形加速芯片和聲卡。這些API控制低級功能、支持輸入設備和控制著混音及聲音輸出。
2 框架描述
無論做什么,效率總是很重要的,為此借鑒了Unity引擎組件+對象的框架模式。在該框架模式中一個對象表示該對象在三維空間中的位置,并且確定與別的對象之間的關系,可以是某對象的父或者子對象,如果是A對象的父對象,那么自己在三維空間中變換時,如移動、旋轉、縮放等,A對象要跟著自己變換。相反如果是A對象的子對象,自己變換時A對象沒有任何變化。A對象變換是,自己將會變換。除此外該對象沒有任何具體功能。如果該對象需要實現具體的功能則需要添加對應的功能組件。如該對象需要被顯示則可以添加網格渲染組件,如該對象需要具有物理碰撞效果則可以添加物理組件。
該框架模式最大的亮點是腳本模塊的實現,上述組件是固定功能,在游戲引擎編寫完成后,使用者無法對組件功能進行更改。為了拓展組件功能,讓使用者自由編寫具體的功能組件,設計實現了腳本模塊。為此先設計了一個名叫DreamBehavior的基類,在該類里聲明了若干的虛函數,如Update函數,該函數將在每一幀畫面被調用一次。然后使用者聲明一個新類繼承DreamBehavior基類并重寫這些函數,最后把這個新類作為組件綁定到對應的對象上,就可以實現用戶自定義功能組件,可以實現更多的功能。使用該框架模式,讓游戲引擎的使用和開發都變的相對容易,結構相對清晰,十分便于理解。
3 接口設計
為了進一步提高游戲引擎的效率,同時保證游戲引擎內容數據及接口的隱藏性和游戲引擎的可拓展性,一個好的接口設計顯得尤為重要。故設計了接口部分,并考慮游戲引擎實現期間接口的封裝性、重用性。最后設計了一個靈活的接口,如圖1所示。
從圖1中可得所有的組件類繼承于BaseCom基組件類,基組件類里實現了大量組件需要用到的共同功能和共同數據。同樣GameObject類作為對象類的基類、Camera類、Light類等對象都繼承該基類,該基類里也有所有對象類共同需要的功能和數據,避免每個對象類都實現相同的功能。同時組件類只有在對象類中被使用才能實現功能。這樣的接口設計,清晰簡潔,十分方便后期的維護以及功能的增加。
4 結語
游戲引擎的開發是一個巨大的工程,代碼成千上萬。為完全實現其基本的功能,一開始如果沒有清晰的總體框架,那么在開發過程中隨著設計的復雜度增加,實現或者更改功能將變得越來越復雜。所以在開始設計實現功能前就需要有一個大概的框架結構。對于接口,根據上述設計將被編譯成動態連接庫的形式提供給開發者,這樣就實現了應用代碼與引擎代碼的無關性,能讓開發者更好的關注游戲的實現,而不需要關心游戲的實現原理。同時也方便設計后期的更新,如果有新的功能,只需要替換動態連接庫,只要保持接口的一致性,開發者幾乎可以不用修改代碼,即可對游戲引擎不同的版本使用。框架的完成接下來就是游戲引擎的實現,這里只是為了突出框架設計在游戲引擎開發過程中的重要性。
參考文獻
[1]Jason Gregory.游戲引擎架構[M].北京:電子工業出版社,2014.
[2]Frank D.Luna.DIRECTX 9.0 3D游戲開發編程基礎[M].北京:清華大學出版社,2012.
[3]Jim Adams.DirectX高級動畫制作[M].重慶:重慶大學出版社,2013.
[4]金守榮.國際游戲場景設計[M].北京:中國青年出版社,2014.
[5]Andre LaMothe.WINDOWS游戲編程大師技巧[M].北京:中國電力出版社,2014.