【正文】
ds of game player needs, while 3D regardless of the game on the game screen reality, smooth operation, and the background of the story of the superiority is very this trend, 2D game occupied market will bee very little, the development of 3D games will bee the game made a trend in the field. For 3D game development, OpenGL as the application programming interface of a 3D (API), is a very suitable. OpengGL as the interface of the software and hardware independence, as long as the operating system uses the OpengGL adapter can reach the same effect. It is also an open graphics library, crossplatform in areas very convenient. And it has good transplantation, is the 3D game developer39。而伴隨著電子產品的不斷發(fā)展,家用計算機的配置越來越高,越來越多的人們對于游戲的要求已經不僅僅只是好玩而已。3D 游戲作為集立體感、真實感于一身的強表現(xiàn)力游戲,已經占據了電腦游戲領域絕大部分市場。 OpenGL 作為一個專業(yè)的圖形程序接口,配合 C++等開發(fā)語言,對于 3D 游戲的設計與實現(xiàn)是非常占優(yōu)勢的?;?OpenGL 三維場景的強大功能是它的實時觀察與漫游技術能夠繪制高真實三維圖形和實現(xiàn) 交互式視景仿真和虛擬現(xiàn)實,因此被廣泛應用與三維游戲、虛擬現(xiàn)實等領域。 分析一些典型的基于 OpenGL/3DMax 的三維場景游戲設計實例的特點,掌握三維場景建模和游戲動畫設計技術,以及在游戲開發(fā)中的交互式技術。 開發(fā)相應的軟件系 統(tǒng),建立交互式三維場景游戲模型,設計并實現(xiàn)各游戲的功能和任務模塊,要求有良好的交互性和 3D 視覺效果。 根據 3D 游戲設計的實際需求,以及基于 OpenGL 的特點上,此次應用 C++與 OPenGL來設計開發(fā) 3D游戲。重點討論了 3D虛擬游戲與現(xiàn)實的人機交互方式、數據的分析處理以及 3D 游戲開發(fā)底層的支持,本文中我們的主要研究內容如下: 西安石油大學畢業(yè)設計(論文) 2 3D 游戲數據處理設計:針對現(xiàn)實游戲與 3D 游戲的區(qū)別,設計合適虛擬游戲 開發(fā)技術的游戲數據處理系統(tǒng),對玩家的動作數據進行捕獲,傳輸和計算; 3D 游戲人機交互設計:針對 3D 游戲特點以及玩家對人機交互需求的變化,對游戲人機交互進行設計; 3D游戲三維底層支持設計:提供對 3D 游戲系統(tǒng)開發(fā)和實現(xiàn)的技術支持; 我們對 3D 虛擬游戲系統(tǒng)的設計采用模塊化設計思想,不同功能之間使用接口方式相互調用,方便對游戲系統(tǒng)的連接,調試和擴展。無論從畫面 的真實細膩程度上講,還是從整個游戲操作的流暢程度來講,亦或者從游戲的故事情節(jié)上來看,國外的 3D游戲均已達到一個很高的境界。 從經濟上來看,國外的 3D游戲制作公司規(guī)模大,不僅有商品的收入,而且版權上也有法律的保障。 從社會的支持上來看,對于 3D游戲的發(fā)展 ,由于文化區(qū)域的不同,社會上對這不是采取一種打壓的態(tài)度,這使得游戲的開發(fā)有一個很安穩(wěn)的環(huán)境。 無論從技術上、還是經濟上,還是社會的態(tài)度上,相比于國外, 3D游戲的制作開發(fā)都有非常長的一段路要走。但是由于 Silicon Graphics 公司已 經不再以任何讓微軟不悅的方式推廣 OpenGL,所以采用 OpenGL 開發(fā)游戲還是具有一定風險。因此,硬件開發(fā)商目前正在想法設法地加強硬件對 OpenGL 的技術支持。 目前,國內的 3D游戲開發(fā)技術正處于趕超國外的發(fā)展時期,從游戲的創(chuàng)意、游戲的策劃、游戲的研究開發(fā)與游戲的實現(xiàn),再到到游戲的運營與維護,都需要大量 的知識值得學習。由于 OpenGL 是一種與平臺無關的三維圖形開發(fā)庫,在各種語言結合應用 OpenGL 函數進行主框架開發(fā)并都可以開發(fā)出 3D游戲。 開發(fā)技術與開發(fā)平臺 開發(fā)技 術 3D游戲設計是以計算機三維圖形學作為游戲的技術基礎。 3D 游戲把游戲世界中的每個物體都看作是一個立體的對象,三維圖形可以包含對象 360 度的信息,能從各個角度去觀察游戲場景。 系統(tǒng)支持模塊:主要提供了包括定時器管理 、窗口管理等功能在內,操作系統(tǒng)功能使用的封裝以及引擎在當前操作系統(tǒng)下驅動的功能。 人機交互模塊:主要提供了對輸入設備的管理,獲取記錄輸入設備產生的響應,例如鍵盤管理、手柄管理、鼠標管理等功能。 開發(fā)平臺 關于 3D 游戲開發(fā),一般是使用 C++與 OpenGL 結合或是采用 C++與 DirectX 結合的方式進行設計開發(fā),這對程序員有很高的要求。如今最有效的開發(fā)還是利用游戲引擎進行游戲的開發(fā)。利用VC++ 與 OpenGL 結合,進行游戲制作,模型則是采用的 MD2模型。 OpenGL 是個專業(yè)的圖形程序接口,是西安石油大學畢業(yè)設計(論文) 4 一個功能強大,調用方便的底層圖形庫。 Visual C++是一個功能強大的可視化軟件開發(fā)工具。 西安石油大學畢業(yè)設計(論文) 5 2 OpenGL簡介與 3D圖形學相關 OpenGL 簡介 OpenGL(全寫 Open Graphics Library)是個定義了一個跨編程語言、跨平臺的編程接口的規(guī)格,它用于三維圖象(二維的亦可)。 OpenGL 適用于從普通 PC到大型圖形工作站等各種計算機,并可與各種主流操作系統(tǒng)兼容,從而成為占據主導地位的跨平臺專業(yè) 3D圖形應用開發(fā)包,進而也成為該領域的行業(yè)標準。 OpenGL 的應用領域十分廣泛,如軍事、電視廣播、 CAD/CAM/CAE、娛樂、藝術造型、醫(yī)療影像、虛擬現(xiàn)實等。這個特點使得程序員在醫(yī)學圖像、虛擬現(xiàn)實、 CAM/CAD/CAE、廣播和等領域中創(chuàng)造和顯示出超乎想象的圖形。伴隨硬件廠商對 OpenGL 的硬件支持, OpenGL 成為了是唯一獨立于供應商的、真正開放的跨平臺圖形標準。 可靠性和可移植性:利用 OpenGL 技術開發(fā)的應用圖形軟件與硬件無關,只要硬件支持 OpenGL API 標準就可以了,也就是說, OpenGL 應用可以運行在支持 OpenGL API 標準的任何硬件上。只要廠商提供 OpenGL 特點 圖形質量好 行業(yè)標準 穩(wěn)定性 可適應性 可移植性 可靠性 易用性 高性能 西安石油大學畢業(yè)設計(論文) 6 擴展,就可以輕松實現(xiàn)硬件特有功能。 可適應性:基于 OpenGL API 的圖形應用程序可以運行在許多系統(tǒng)上,有次, OpenGL應用程序可以適應開發(fā)人員選擇的各種目標平臺。與其它的圖形程序包相比, OpenGL 應用程序只有很少的代碼,因此執(zhí)行速度快。 OpenGL功能 OpenGL 是一個獨立于操作系用和窗口系統(tǒng)開放的三維圖形軟件包,以 OpenGL 為基礎開發(fā)的應用程序可以十分方便地在各種平臺間進行移植; OpenGL 還可以與 VC++緊密接口,便于實現(xiàn)圖形的有關計算和圖形算法,可保證算法的正確性和可靠性; OpenGL使用簡便,效率高。 變換: OpenGL 圖形庫的變換包括基本 變換和投影變換。其變換方法有利于減少算法的運行時間,提高三維圖形的顯示速度。 光照和材質設置: OpenGL 光有自發(fā)光( Emitted Light)、環(huán)境光( Ambient Light)、漫反射光( Diffuse Light)和高光( Specular Light)。場景( Scene)中物體最終反 映到人眼的顏色是光的紅綠藍分量與材質紅綠藍分量的反射率相乘后形成的顏色。利用 OpenGL 紋理映射功能可以十分逼真地表達物體表面細節(jié)。以上三條可使被仿真物更具真實感,增強圖形顯示的效果。 此外,利用 OpenGL 還能實現(xiàn)運動模糊、深度暗示等特殊效果,利用這些效果可以實現(xiàn)消隱算法。它的操作順序如圖 22: 圖 23 OpenGL渲染流程 顯示列表:任何數據,不管它所描述的是幾何圖形還是像素,都可以保存在顯示列表中,供當前貨以后使用。 基于頂點的操作:對于頂點數據,接下里的一個步驟就是“基 于頂點的操作”,就是把頂點變換為圖元。點裁剪就是簡單地接受或拒絕頂點,直線或多邊形裁剪則能夠添加額外的頂點,具體取決于直線或多邊形是如何進行裁剪的。接著,數據被縮放、便宜,并根據像素圖進行處理。 紋理裝配: OpenGL 應用程序可以在幾何物體上應用紋理圖形,使它們看上去更為逼真。 片段操作:在數據使勁存儲到幀緩沖區(qū)前,將要執(zhí)行一系列操作。所有這些操作都可以被啟用或者禁用。三維的向量 ? ?00 zy0x ,分別表示的是沿 X 坐標方向、 Y 坐標方向和 Z 坐標方向的位移。 矩陣 ,在 數學 中的定義是,縱橫排列的二維數值列陣。 ????????????1000000210210210zzzyyyxxx 變換 變換可以分為平移變換、旋轉變換、縮放變換。要對一個點進行平移變換,只需要將每個坐標軸的增量值,或者說沿每個坐標軸的平移數值,加上要平移坐標點的原始坐標值就行了。關于 y軸的旋轉與 z軸的旋轉也是同樣的道理。旋轉變換所形成的連續(xù)組合變換的思路是合并矩陣,將幾個變換矩 陣合并成一個變換矩陣,先繞 z軸轉,再繞 y軸轉,最后繞 x 軸旋轉。 在 3D圖形學中,要涉及到兩種投影,一種是平行投影,另一種則是透視投影。平行投影可以分兩步來完成,第一步先將投影 的平面轉換到 3D 空間中的 xy 平面上,第二部就是除去所有可見點 z項的坐標信息。 透視投影符合人們心理習慣,即離視點近的物體大,離視點遠的物體小,遠到極點即為消失,成為滅點 ,如圖 24: 圖 24 投影 3D裁剪 當物體的世界坐標超值超過屏幕視區(qū)范圍時,對物體進行透視變換操作就可能引起錯誤。解決這一問題通常是創(chuàng)建一個視體 (視體其就是 3D 空間中相對于觀察者為可見的一個區(qū)域)。對于透視投影來說,視體為金字塔形,如圖 25: 西安石油大學畢業(yè)設計(論文) 10 圖 25 透視投影的物體總是金字塔形狀 西安石油大學畢業(yè)設計(論文) 11 3 游戲設計 游戲的組成 一個游戲作品可以分為游戲引擎和游戲資源兩大部分。它像一個發(fā)動機,控制著游戲的運行。游戲引擎則是按游戲設計的要求順序的調用這些資源。 對于一個簡單的游戲來說,它的游戲引擎可以分成輸入設備、游戲邏輯、場景數據庫、音頻子系統(tǒng)、場景物體對象、紋理處理、物理子系統(tǒng)、粒子系統(tǒng)。在單一游戲循環(huán)之中,游戲邏輯子系統(tǒng)對如如做出反應,對游戲物體對象之星所需要的所有物理計算、處理碰撞檢測和反應、載入和銷毀物體對象、在場競爭移動視點、以及播放游戲運行時所需要的所有聲音。游戲與其它應用軟件有著一定的區(qū)別,它不是我們的單線、事件驅動或順序邏輯的程序。 游戲中所包括的性能有粒子爆炸效果、 MD2 模型的載入、動畫和邊界碰撞檢測、視點的控制和移動、聲音效果、簡易 AI 系統(tǒng)、地形的繪制與生成。 游戲框架結構如圖 3圖 3圖 35和圖 36: 其它 紋理 音樂 聲音 三維模型 物理 游戲數據庫 輸入 輸入 游戲邏輯 游戲邏輯 輸入 游戲邏輯 西安石油大學畢業(yè)設計(論文) 13 圖 33 游戲工程結構 圖 34 source files內含結構 西安石油大學畢業(yè)設計(論文) 14 圖 35 header files內含文件結構 圖 36 external dependencies內含文件結構 下面,這里主要說明一下,此游戲中所采用的關鍵技術。這是人機交互的一種重要體現(xiàn),能夠大大提高游行可玩性,這就需要用到漫游。當視點的位置、視向和參考方向發(fā)生改變時, 場景中的物體相對于觀察者的方位也發(fā)生了變化,從而產生了“動感”。其功能與現(xiàn)實世界的攝像機類似,視線方向可由參考點位置確定(參考點位置減去視點位置即可得到視線方向的向量)。 在游戲中,需要通過鍵盤上的方向鍵實現(xiàn)先后左右的移動,通過鼠標的拖拽實現(xiàn)旋轉視圖以從多角度觀察地物。 Void gluLookat(GLdouble eyex,GLdouble eyey, GLdouble eyez