近年來,網路遊戲的發展日新月異,這離不開遊戲引擎,而遊戲引擎中最重要的莫過於渲染引擎,因為它直接影響遊戲的畫面品質和視覺效果。渲染引擎編輯器是針對某款渲染引擎而開發的工具,通過渲染引擎編輯器,開發人員無需瞭解渲染引擎的內部構架、工作原理,無需編碼便可創作出效果良好的情境供三維應用程式使用,大大提高了開發效率,節省了開發成本。
2 OGRE簡介
開源圖形渲染引擎OGRE(Open-source Graphics Rendering Engine)是一款開源的、物件導向的三維圖形渲染引擎,由一個小型核心團隊編寫和維護,並依靠其不斷成長的社區提供支援。由於是一款開源引擎,所以得到各種團體組織的改造和擴充,從而能夠適應不同的應用領域並擁有更強大的功能。
OGRE的特點有:平台無關性,它支援Windows和Linux以及Mac OSX平台;可擴充的例子架構,使程式運行更快更簡單;接受靈活的網格資料格式。可以從許多三維建模工具中匯出模型,包括Milkshape3D,3D Studio Max,Maya,Blender和Wings3D;強大的材質聲明語言允許在代碼外維護材質資源,支援多材質技術,允許根據顯卡能力的不同設計不同的材質,OGRE會自動選擇當前顯卡支援的使渲染效果最好的技術;高度靈活的情境管理機制,由使用者決定採用何種情境類型,並允許使用者通過插人開發的子類來擷取對情境的完全控制,情境圖結構化,允許實體物件附加在情境節點上並隨節點移動。
3 主要模組介紹
(1)CAELUM它是OGRE的第三方外掛程式,其目標是產生似照片般效果的大氣情境,其中包括天空顏色,雲和各種氣象效果(雨,雪等),能繪製太陽、月亮(月相)、星空,並能根據目前時間和攝像機角度即時更新這些對象在情境中的位置和狀態。
(2)ETL可編輯地形管理器它是OGRE的第三方外掛程式庫,它能夠基於高位元影像來管理和展示地形,可以作為地形情境管理工具使用,但其更大的優點是能夠編輯地形,通過它可以即時的改變或設定地形的高度。該捕件庫的設計非常精巧,各個組成部分相互獨立,所以使用者可隨機播放需要的部分,而不會因為某些部分的缺失而影響整體。
(3)PagedGeometry分頁幾何體引擎它是OGRE的第三方外掛程式,用來最佳化渲染覆蓋無限地區的巨大數量的微小實體。該引擎非常適合用來渲染戶外情境。如擁有成千上萬顆樹的茂密森林。分頁幾何體引擎與平面實體引擎相比具有很多優勢,其中最重要的是速度,如果細節層次使用得當,由分頁幾何體管理的戶外情境比平面實體渲染速度要快100倍。另一個優勢是分頁技術的使用,即只有當實體需要立即被顯示在情境中時,才會將該頁的實體載人記憶體,這樣就可以幾乎無限放大虛擬情境。
(4)Hydrax它也是OGRE的第三方外掛程式,提供一個易用的庫用來渲染漂亮的水紋情境。Hydrax提供的所有渲染效果都是可配置的,包括深水效果、平滑過渡效果、泡沫效果及水下光線效果等,這些效果還可以根據需要即時變化。
4 系統設計與實現
系統結構1所示。此編輯器是基於外掛程式的針對O-GRE的所見即所得 (WYSIWYG)編輯器,通過它能夠快速構建一個情境模型,也可以把這些情境作為內容載入OGRE應用程式。
4.1 外掛程式技術原理
外掛程式的本質在於不修改程式主體(平台)而對軟體功能進行擴充與加強。當外掛程式的介面公開後,任何公司或個人都可以製作自己的外掛程式來解決一些操作上的不便或增加新的功能,實現真正意義上的“隨插即用”軟體開發。“平台+外掛程式軟體”結構是將一個待開發的目標軟體分為兩部分,一部分為程式的主體或主架構,可定義為平台,另一部分為功能擴充或補充模組,即定義為外掛程式。
4.2 外掛程式的實現方法
該編輯器的外掛程式實現方法是在架構代碼中建立介面,這些介面使架構與動態庫解耦。外掛程式提供介面的實現。把外掛程式與動態連結程式庫區分開是因為它們的載入方式不同:程式不會直接連結外掛程式,而是在某些目錄下尋找,如果發現便按照設定檔中定義的方式進行載入。
外掛程式實現過程涉及很多類。下面僅介紹5個類CBaseEditor,CBaseEditorFactory,OgreEditorRoot,CTerrainEdi-tor,CETLEditorFactory,並列出部分代碼闡述捕件實現過程,見圖2。
CBaseEditor是定義的介面,由其派生的CTerrainEditor是介面的實現,即外掛程式。當點擊主介面的ETL按鈕時,O- greEditorRoot能夠監聽到點擊該按鈕事件的發生,隨後調用dllStartPlugin函數。dllStartPlugin函數負責調用建立 CTer-rainEditor對象的工廠,由工廠(CETLEditorFactory)編輯器對象(CTerrainEditor)執行個體。
CTerrainEditor對象建立完成後,dllStartPlugin會向OgreEditorRoot註冊該編輯器對象執行個體。 OgreEditorRoot由Singleton繼承而來,為保證程式中只存在一個執行個體,OgreEditorRoot負責外掛程式的載入和卸載,並提供 RegisterObjectName函數,供編輯器外掛程式註冊使用。
5 結束語
開發三維遊戲或其他三維應用程式是非常耗費人力的工作,利用此編輯器可快速構建三維情境供三維應用程式所用,提高開發效率,降低開發成本。基於平台加外掛程式的設計方式能夠在不修改編輯器平台的情況下,方便擴充編輯器功能。