999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

3D應用開發基礎平臺的設計與實現

2010-01-01 00:00:00崔平,王芳
電腦知識與技術 2010年3期

摘要:為了提高3D應用開發的可重用性,在對游戲引擎的結構和功能進行深入研究的基礎上,設計并實現了一種開發3D應用程序的基礎平臺。結合模板方法設計模式,提出了具有靈活接口的通用開發框架;設計了一種阻塞式隊列,提出了雙隊列三線程網絡接口模型,實現了高效的消息收發和處理;給出了應用示例,說明該平臺具有良好的通用性、擴展性和穩定性,能夠較大地提高3D應用程序的開發效率。

關鍵詞:3D應用;通用開發框架;模板方法;阻塞式隊列

中圖分類號:TP37文獻標識碼:A文章編號:1009-3044(2010)03-621-03

Design and Implementation of a Basic Platform for 3D Application Development

CUI Ping1, WANG Fang2

(1.Institute of Command Automation, PLA University of Science and Technology, Nanjing 210007, China; 2.Unit 61251 of PLA, Huludao 125200, China)

Abstract: To improve the reusability of developing 3D application, a basic platform for 3D application is designed and implemented after studying the structure and function of Game Engine. Making use of Template Method design pattern, a universal development framework with flexible interfaces are proposed; a network interface model with two queues and three threads is proposed by designing a Blocking Queue, which can achieve efficient network message receiving, sending and processing; finally a demonstration is given to prove that the platform is provided with gooduniversalness, expansibility and stability, which can promote the efficiency of developing 3D application greatly.

Key words: 3D application; universal development framework; template method; blocking queue

隨著計算機技術的發展,3D越來越多地運用在虛擬制造、虛擬展示、模擬訓練等方面。雖然應用的領域各不相同,但3D程序中的大部分設計和代碼實現是可以重用的。因此,可以以一個通用的開發平臺為基礎,在不同的應用領域對該平臺進行領域相關的擴展。以這樣的方式來開發3D應用程序,對于提高3D應用設計和代碼的可重用性,降低開發成本,提高效率非常必要。

游戲是3D應用的一個成熟領域,游戲引擎的誕生為其快速發展產生了巨大的推動作用。該文在研究游戲引擎功能組成和結構設計的基礎上,設計并實現了一種3D應用開發基礎平臺,用以提高3D應用的開發效率。

1 相關工作

游戲引擎的誕生較大地縮短了游戲的開發周期[1],對其設計的優化也成為3D應用領域研究的一個重點。江峰[2]分析了游戲引擎的組成,并對各模塊結構進行了設計;陳凱[1]、樊翠[3]分別給出了游戲引擎的總體架構,介紹了各模塊的功能并對其進行了實現;史超[4]在研究游戲引擎各模塊關鍵技術的基礎上,用Java語言開發了一款不基于任何顯卡API的軟引擎。夏旺盛[5]等則從游戲引擎的功能組成的角度對引擎的結構進行了分析,并描述了各功能模塊的特點。

參考以上對游戲引擎的研究,結合他們提出的游戲引擎的架構,3D應用開發基礎平臺的主要部分可以概括如圖1所示。

各部分主要功能為:

1) 基礎層由I/O支持、網絡接口、基礎數學庫三部分組成。其中I/O支持提供對鼠標、鍵盤等輸入輸出設備的支持,主要負責用戶對應用程序的輸入控制和應用程序對用戶的輸出反饋;網絡支持提供應用程序對聯網功能的支持,主要負責應用程序與網絡之間的數據封裝、發送、接收、拆封等;基礎數學庫提供全面的數學運算支持,包括常用的標量運算、三角函數、向量運算、矩陣運算等。

2) 實現層由場景對象庫、GUI控件庫、圖形設備庫三部分組成。其中場景對象庫對應用程序中的場景對象進行具體實現,負責對象的創建、銷毀、渲染等;GUI控件庫對GUI控件進行實現,負責GUI控件的創建、銷毀、顯示、事件觸發和處理等;圖形設備接口是對3D圖形硬件設備接口的封裝,為開發人員提供操作圖形設備的API。

3) 應用層由通用開發框架和輔助開發工具兩部分組成。其中通用開發框架為開發人員提供了開發3D應用的基礎,它定義了3D應用程序的通用運行流程,并將其中與具體應用相關的部分以接口的方式提供給開發人員,使得開發人員能夠對其進行靈活擴展;輔助開發工具則是幫助開發人員不用編寫代碼就可以編輯應用中所需資源的工具,通常包括GUI控件編輯器、粒子系統編輯器等。

該文重點對通用開發框架和網絡接口部分進行了詳細分析,提出了設計思路并進行了實現;平臺中的其他部分由于理論已經比較成熟,在此不再贅述。

2 基礎平臺的設計與實現

2.1 通用開發框架的設計與實現

通用開發框架規定了3D應用運行的基本流程。參考Microsoft DirectX SDK中的框架示例,3D應用的運行過程可以分為四個階段:初始化階段、渲染循環階段、異常處理階段、退出階段,如圖2所示。其中初始化階段主要是建立應用程序的初始場景,完成圖形設備和場景對象的初始化;渲染循環階段主要是顯示場景對象,對變換的場景對象進行及時更新;異常處理階段主要是在圖形設備丟失時嘗試對設備進行重置,必要時銷毀現有設備并重建;退出階段主要完成對圖形設備相關資源的回收,釋放占用的設備無關資源等。對該基本工作流程定義如圖2所示。

上述工作流程中,初始化設備無關資源、初始化設備相關資源、銷毀設備相關資源、銷毀設備無關資源這些部分是與實際應用相關的,需要由開發人員決定在應用中使用哪些對象,從而對它們執行以上操作;其他部分則是固定不變的。因此,采用模板方法設計模式[6]的思想對通用開發框架進行設計和實現,將應用相關部分作為接口公開出來,實現了框架的通用性和擴展性。抽象出來的IFrame接口定義如圖3所示。

2.2 IFrame接口

IFrame接口是由通用開發框架中與應用相關的部分抽象出來的。對IFrame公開的接口函數的功能描述如下:

1) OneTimeSceneInit:初始化設備無關資源。通常是調用程序中用到的對象的構造函數。該平臺將開發過程中用到的資源定義為兩部分:設備相關部分和設備無關部分。以紋理資源為例,它對應的紋理文件的路徑和名稱是設備無關的;通過讓圖形硬件設備加載指定文件生成的紋理實例(例如DirectX的Texture對象)是設備相關的。

2) InitDeviceObjects:初始化設備相關資源。在渲染設備創建后調用,根據指定的參數初始化各對象中與設備相關的部分。在設備重置后需要再次調用。

3) FrameMove:調整場景內容。隨著時間的推移和用戶的交互操作,場景中的對象的屬性是在不斷變化的。用戶可能需要移動觀察的視角,拖動場景中的物體等,這些操作導致的場景中對象的屬性變化都需要在這個函數中進行處理。

4) Render:渲染場景。將場景中的對象反映到顯示器上,這一步完成對象由模型坐標系到世界坐標系的映射、紋理映射等,最終實現應用程序中各對象的渲染顯示。

5) Delete Device Objects:銷毀設備相關資源。與Init Device Objects相對,釋放各對象中設備相關的部分占用的內存空間。在設備不可用需要重建或即將銷毀時調用。

6) Final Cleanup:銷毀設備無關資源。與One Time Scene Init相對,釋放各對象中設備無關部分占用的內存,防止發生內存泄露。在程序退出時調用。

開發過程中用到的所有需要渲染的對象都必須實現IFrame接口。在對平臺進行擴展的過程中,所有實現IFrame接口的對象都能夠方便地應用到程序當中,而不需要對框架進行修改,保證了平臺的穩定性。

2.3 網絡接口的設計與實現

參考文獻[7]對Win Sock套接字進行了詳細的描述,指出了各種模型的優缺點。該節以簡單實用的阻塞套接字為基礎,以多線程的方式對其缺陷進行彌補,提出了一種雙隊列三線程的UDP套接字接收處理模型,如圖4所示。

其中,接收隊列用于緩存接收線程從套接字中接收到的消息;發送隊列用于緩存應用程序要求發送線程發送的消息;接收線程負責接受套接字中的消息并將其放入接收隊列中,當套接字沒有接收到消息時阻塞;發送線程負責從發送隊列中讀取需要發送的消息并通過套接字發送到網絡中,當發送隊列為空時阻塞;處理線程負責讀取接收隊列中的消息,并根據開發人員定義的處理函數對消息進行處理,當接收隊列為空時阻塞。

該模型中的三個線程都是在不停循環的,直到程序終止。為了避免這些線程一直占用CPU資源,就需要一種機制,使得它們只在需要處理時運行,其他時間則處于掛起狀態。接收線程的運行依賴于阻塞套接字,其掛起與否是由套接字是否接收到消息決定的;處理線程和發送線程則是由兩個隊列控制的,因此需要設計一種阻塞式的隊列,該隊列為空時會導致試圖使隊列單元出隊的線程掛起。

信號量[8]機制可以滿足上述需求。利用生產者—消費者模式設計阻塞式隊列,其入隊、出隊操作偽代碼如下:

Enqueue(value)

{m_cWriteMutex.WaitOne();//進入寫操作臨界區

m_cQueue.Enqueue(value);//隊列單元入隊

m_cSemphore.Release(1); //增加單元數量信號量

m_cWriteMutex.ReleaseMutex();//退出寫操作臨界區}

Dequeue(out value)

{m_cReadMutex.WaitOne();//進入讀操作臨界區

m_cSemphore.WaitOne();//減少單元數量信號量

value = m_cQueue.Dequeue();//隊列單元出隊

m_cReadMutex.ReleaseMutex();//退出讀操作臨界區}

其中,m_cQueue是一個常規隊列,用于存放隊列單元;m_cWriteMutex、m_cReadMutex是兩個互斥信號量,用于保證出隊、入隊操作的原子性;m_cSemphore是信號量,用于指示隊列中單元的數量,當數量為0時使出隊操作阻塞。

采用信號量機制后的阻塞式隊列,能夠有效消除線程的不必要循環,在線程不需要運行時自動掛起,將CPU時間讓給其他線程,提高程序效率。

3 應用示例

以上述的平臺為基礎,開發了某模擬訓練系統,其客戶端和遠程監控服務器端運行如圖5所示:在客戶端,用戶可以通過鼠標對場景中的虛擬設備進行操作,改變設備的姿態,選擇并點擊設備的組成部件等;這些操作命令通過網絡接口以UDP消息傳輸到遠程的監控服務器,由監控服務器對其進行解析,并通過自身的對象管理機制對被操作對象在服務器本地的鏡像進行狀態更新,實現了遠程的實時監控。

系統中客戶端和服務器端都是在基礎平臺上擴展實現的,通過對通用開發框架的接口進行重載,加入不同的處理邏輯,就實現了不同的功能。系統中的虛擬設備由基礎平臺中的場景對象庫擴展而來;左上角用以表明幀頻和攝像機位置的參數顯示直接使用了基礎平臺中的GUI控件庫中的標簽控件。因此,該模擬訓練系統的實現說明了基礎平臺具有良好的通用性、擴展性和穩定性。

4 結束語

為了解決3D應用開發可重用性低的問題,設計并實現了一種穩定易擴展的基礎平臺。通過平臺提供的通用開發框架,可以對該平臺進行應用領域相關的擴展,從而開發出特定領域的3D應用程序,方便快捷,具有較強的實用性和通用性,提高了3D應用開發的效率。

基礎平臺的所有組成部分之間關系比較松散是通過通用開發框架組織在一起的。這種低耦合的組織方式使得各模塊在遵循其接口規范的前提下,可以使用新的模塊進行替換,而不影響基礎平臺中的其他功能模塊。因此基礎平臺能夠隨著3D技術的發展和完善不斷進行更新和升級,進一步增強了基礎平臺的可用性。

參考文獻:

[1] 陳凱.三維游戲引擎的設計與實現[D].杭州:浙江大學,2007.

[2] 江峰.三維游戲引擎研究與實現[D].杭州:浙江大學,2005.

[3] 樊翠.三維游戲引擎的設計及關鍵技術的實現D].西安:西北工業大學,2006.

[4] 史超.軍事3D網絡游戲引擎的設計與實現[D].大連:大連理工大學, 2006.

[5] 夏旺盛,黃心淵.3D游戲引擎構架概述[J].現代計算機,2003(165):74-76.

[6] 莫勇騰.設計模式(C#/Java 版)[M].北京:清華大學出版社,2006.

[7] 耿衛東,陳凱,李鑫,等.三維游戲引擎設計與實現[M].杭州:浙江大學出版社, 2008.

[8] Tanenbaum A S.現代操作系統[M].陳向群,馬洪兵,譯.北京:機械工業出版社,2006.

主站蜘蛛池模板: 亚洲国产中文精品va在线播放| 国产成人永久免费视频| 久久精品视频一| 国产另类视频| 另类欧美日韩| a级毛片视频免费观看| 青青草欧美| av在线5g无码天天| 成人免费黄色小视频| 亚瑟天堂久久一区二区影院| 永久免费AⅤ无码网站在线观看| 人人妻人人澡人人爽欧美一区| 日韩午夜片| 青青草原国产免费av观看| 永久成人无码激情视频免费| 色妞永久免费视频| 国产在线小视频| 欧美va亚洲va香蕉在线| 亚洲av中文无码乱人伦在线r| 色综合激情网| 无码aⅴ精品一区二区三区| 秋霞国产在线| 中文字幕无码电影| 九九热在线视频| 99尹人香蕉国产免费天天拍| 亚洲欧美自拍一区| 在线观看欧美国产| 国产微拍一区二区三区四区| yjizz视频最新网站在线| 国产福利一区二区在线观看| 国产三级成人| 亚洲欧美成人在线视频| 国产在线专区| 国产黄色免费看| 亚洲天堂网站在线| 欧美日韩中文字幕在线| 国产特一级毛片| 国产噜噜噜视频在线观看| 手机永久AV在线播放| 91人妻日韩人妻无码专区精品| 国产区免费精品视频| 91福利免费| 亚洲性影院| 97在线观看视频免费| 亚洲av综合网| 亚洲一区无码在线| 成人在线第一页| 五月激情婷婷综合| 国产精品林美惠子在线观看| 国产精品尤物铁牛tv| 91丝袜乱伦| a毛片在线免费观看| 高清视频一区| 中文毛片无遮挡播放免费| 国产制服丝袜无码视频| 日本三区视频| 在线一级毛片| 国产高清在线观看| 片在线无码观看| 国产香蕉在线视频| 国产精品真实对白精彩久久| 免费亚洲成人| 曰韩人妻一区二区三区| 欧美成人一区午夜福利在线| 国产亚洲精| 性视频久久| 高h视频在线| 少妇精品久久久一区二区三区| 在线观看亚洲天堂| 999国内精品久久免费视频| 亚洲视频色图| 日本国产在线| 91av国产在线| 日本精品影院| 国产激情无码一区二区免费 | 国产丰满大乳无码免费播放| 免费可以看的无遮挡av无码| 亚洲毛片一级带毛片基地| 国产免费人成视频网| 在线国产综合一区二区三区| 91久久偷偷做嫩草影院精品| 亚洲香蕉久久|