【文章內(nèi)容簡介】
出的游戲,無一不是經(jīng)典,也就是說可以從物理系統(tǒng)的復雜程度上來簡單區(qū)別一個游戲的好壞。計算機圖形學在動畫的繪制上應用廣泛,如人物的模型。繪制人物的動畫模型,應用于多種多樣的影視作品之中。但是,在電腦 3D 游戲中,角色的繪制是一個很難解決的事情,因為生成的角色模型必須隨著輸入設備下達的指令隨時變化,同時也要和其余的人物產(chǎn)生互動。這個時候,計算機的繪制科技就顯得尤為重要,一些成熟的技術可以應對大型 3D 游戲的開發(fā),一些多層次的動畫繪制技術卻變得更加困難。繪制手段通常有:幾何圖形的設計,動態(tài)繪畫方法和人物軀干的控制。(AI)AI 系統(tǒng)在游戲中是必不可少的,玩家在進行游戲的過程有,會有很多的敵人,玩家的任務是與其進行爭斗直到完成某些特定的任務。如果 AI 表現(xiàn)的過于疲軟,那么這個游戲?qū)ν婕业奈蜁档?,所以完?AI 可以增加游戲的難度,吸引玩家在游戲上投入更多的時間。在游戲里,AI 操控著非玩家單位的行為, AI 有很多種類和很多手段去執(zhí)行,像腳本和硬編碼行為等等。 DirectXDirectX 是微軟公司生產(chǎn)的一個應用程序接口的軟件,在設計研發(fā)交互式軟件中起了很重要的作用。它在 1995 年出現(xiàn),到現(xiàn)在已經(jīng)是研發(fā)多媒體系統(tǒng)軟件的金標準,全部的研發(fā)成員都在應用這個軟件進行開發(fā)設計。DirectX 不僅僅應用于游戲的研發(fā)還能夠設計一些軟件可以設計游戲中的角色,還可以設計一些關于網(wǎng)絡和圖形的軟件。API DirectX 包括 DirectGraphics,DirectInput,DirectPlay ,DirectMusic ,DirectSound 這些部分。每個部分都可以各自獨立運行,進行不同功能的運作。它們都可以被硬件加速,也就是說能夠直接與硬件進行數(shù)據(jù)交流,能夠給設計人員更好的操作條件。2.技術介紹 VC++開發(fā)語言如今,在開發(fā) 3D 游戲的過程中需要根據(jù)不同的要求來挑選相應的開發(fā)語言。例如,在開發(fā)小型的 3D 游戲程序中,主流的軟件有:? 微軟公司的 Visual C++和 DirectX SDK 開發(fā)包? 微軟公司的 C和 XNA? Visual C++和 OpenGL在現(xiàn)在市面上許許多多的程序開發(fā)軟件中,有的在語言彈性和執(zhí)行的效率上有優(yōu)勢,有的傾向處理和運算圖形,有的傾向設計大型軟件,可以滿足設計人員的各種目的,各有各的特點。在這些軟件中 Visual C++和 DirectX SDK 這個由微軟公司出品的組合,在開發(fā) 3D 游戲中有著重要的作用,現(xiàn)在市面上的游戲幾乎都有DirectX 的程序,在這次的論文中,我也選擇這個組合來進行開發(fā)。 Visual C++VC++是 Windows 平臺上的 C++編程環(huán)境,在 Windows 平臺上具有強大的優(yōu)勢。在 3D 圖形開發(fā)中更因為自己語言的特點具有無可比擬的優(yōu)勢,具體體現(xiàn)在:(一)面向?qū)ο竺嫦驅(qū)ο罂梢哉f是 VC++最重要的特性。VC++語言的設計完全是面向?qū)ο蟮摹C++支持靜態(tài)和動態(tài)風格的代碼繼承及重用(二)底層調(diào)用VC++主要面向 Windows 系統(tǒng),可以方便實現(xiàn)一些底層的應用。在 VC++中直接調(diào)用硬件等底層接口非常方便。在 3D 圖形開發(fā)中,直接調(diào)用顯卡而不是通過復雜的接口可以更高效的顯示圖形。(三)執(zhí)行效率高VC++的編譯和鏈接器具有非常高效的執(zhí)行效率,與同為微軟公司出品的 C語言相比,VC++的執(zhí)行效率比之要高出數(shù)倍以上。雖然 VC++不像 C一樣支持垃圾回收功能大大降低了開發(fā)效率,但這在 3D 游戲圖形程序開發(fā)中卻能使開發(fā)人員更好的處理內(nèi)存與指針,大大提高了執(zhí)行效率。(四)多線程 VC++支持多線程,多線程功能使得在一個程序里可同時執(zhí)行多個小任務。線程,有時也稱小進程,是一個大進程里分出來的小的獨立的進程。(五)與 DirectX SDK 的無縫組合VC++與 DirectX SDK 均為微軟公司出品,且 DirectX SDK 中的所有源代碼均為C++語言編寫,在接口調(diào)用上它們存在的天然的優(yōu)勢,這也說明了為什么在圖形游戲開發(fā)中它們一直是雷打不動的組合。 DirectX SDKDirectX, (Direct eXtension,簡稱 DX)是由微軟公司創(chuàng)建的多媒體編程接口。由 C++編程語言實現(xiàn),遵循 COM。被廣泛使用于 Microsoft Windows、Microsoft Xbox 和 Microsoft Xbox 360 電子游戲開發(fā),并且只能支持這些平臺。最新版本為DirectX 11,普及版本為 DirectX 。DirectX 是多種應用程序接口(API)的集合,它可以讓 windows 為平臺的游戲或多媒體程序獲得更高的執(zhí)行效率。DirectX 包含有 Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects 等多個組件,它提供了一整套的多媒體接口方案。(一)Direct3D為大多數(shù)新視頻適配器內(nèi)置的 3D 調(diào)色功能提供界面。 Direct3D 是一種低級的 3D API,它為軟件程序提供一種獨立于設備之外的方法以便與加速器硬件進行有效而強大的通信。Direct3D 包含專用 CPU 指令集支持,從而可為新型計算機提供進一步加速支持。 (二)DirectSound為程序和音頻適配器的混音、聲音播放和聲音捕獲功能之間提供了鏈接。DirectSound 為多媒體軟件程序提供低延遲混合、硬件加速以及直接訪問聲音設備等功能。維護與現(xiàn)有設備驅(qū)動程序的兼容性時提供該功能。 (三)DirectInput為游戲提供高級輸入功能并能處理游戲桿以及包括鼠標、鍵盤和強力反饋游戲控制器在內(nèi)的其它相關設備的輸入。(四)DirectPlay支持通過調(diào)制解調(diào)器、Inter 或局域網(wǎng)連接游戲。DirectPlay 簡化了對通信服務的訪問,并提供了一種能夠使游戲彼此通信的方法而不受協(xié)議或聯(lián)機服務的限制。DirectPlay 提供了多種游說服務,可簡化多媒體播放器游戲的初始化,同時還支持可靠的通信協(xié)議以確保重要游戲數(shù)據(jù)在網(wǎng)絡上不會丟失。(五)DirectShow提供了可在您的計算機與 Inter 服務器上進行高品質(zhì)捕獲與回放多媒體文件的功能。DirectShow 支持各種音頻與視頻格式,包括“高級流式格式 (ASF)”、“音頻視頻交錯 (AVI)”、 “數(shù)字視頻 (DV)”、 “動畫專家組 (MPEG)”、 “MPEG 音頻層 3 (MP3)”、 “Windows 媒體音頻/視頻 (WMA/WMV)”以及 WAV 文件。DirectShow 還具有視頻捕獲、DVD 回放、視頻編輯與混合、硬件加速視頻解碼以及調(diào)諧廣播模擬與數(shù)字電視信號等功能。 3DMAX簡介3D 游戲系統(tǒng)中需要有大量 3D 模型的存在,對于 3D 模型的制作,3DMAX 當然是首選。3D Studio Max,常簡稱為 3ds Max 或 MAX,是 Autodesk 公司開發(fā)的基于 PC 系統(tǒng)的三維動畫渲染和制作軟件。在應用范圍方面,廣泛應用于廣告、影視、工業(yè)設計、建筑設計、多媒體制作、游戲、輔助教學以及工程可視化等領域。擁有強大功能的 3DS MAX 被廣泛地應用于電視及娛樂業(yè)中,比如片頭動畫和視頻游戲的制作,深深扎根于玩家心中的勞拉角色形象就是 3DS MAX 的杰作。在影視特效方面也有一定的應用。而在國內(nèi)發(fā)展的相對比較成熟的建筑效果圖和建筑動畫制作中,3DS MAX 的使用率更是占據(jù)了絕對的優(yōu)勢。根據(jù)不同行業(yè)的應用特點對 3DS MAX 的掌握程度也有不同的要求,建筑方面的應用相對來說要局限性大一些,它只要求單幀的渲染效果和環(huán)境效果,只涉及到比較簡單的動畫;片頭動畫和視頻游戲應用中動畫占的比例很大,特別是視頻游戲?qū)巧珓赢嫷囊笠咭恍挥耙曁匦Х矫娴膽脛t把 3DS MAX 的功能發(fā)揮到了極至。 3D游戲技術理論 3D圖形的基本成像流程傳統(tǒng)上 3D 圖形的處理方法是,將待顯示的 3D 物體(如杯子)表面微分為一個個小三角形面(這些三角形面的數(shù)量越多,顯示出來圖形效果越精致、光滑) 。每個三角形面就成為構成 3D 復雜物件的基本圖元,它有 3 個頂點。這樣 3D 物件的繪制就轉(zhuǎn)換為逼近的微小三角形面的繪制,而 3D 物件的圖形方位數(shù)據(jù)就可用三角形的頂點坐標值來存儲。3D 物體劃分為眾多的三角形面表示后,物體表面的圖形方位就可利用三角形面的頂點來確定。為了從數(shù)值上定量 3D 圖形的方位數(shù)據(jù),引入一個世界坐標系,這樣每一個頂點均可準確地用一個(x,y,z)坐標定位出來,從而實現(xiàn) 3D 圖形的形數(shù)轉(zhuǎn)換。一般地,場景中的每個待顯示的 3D 物體都采用某個中心點作為原點來架設坐標系,以給出每個逼近三角表頂點的坐標值。畢竟,場景中的這些 3D 物體通常是各自先行創(chuàng)建出來的,例如,利用一些 3D 建模軟件取得的網(wǎng)格頂點數(shù)據(jù)就是基本這樣的坐標系。這種坐標系稱為局部坐標系。在大多數(shù)情形下,局部坐標系的 x、y 和 z 軸都與世界坐標系 x、y 和 z 軸是相應平行的。在一個預先設定的世界坐標空間中,為每個局部坐標系選定原點位置后,各個局部坐標系的 3D 物體上的部分三角形的頂點坐標,就可通過簡單的平移計算轉(zhuǎn)換為世界坐標系下的坐標。這里,局部坐標系和世界坐標系不可以脫離開來理解,否則這個局部坐標系的點坐標無法準確地用統(tǒng)一的坐標系(世界坐標系)的坐標值來表示。三角形面的頂點(x,y,z)坐標值已成功解決了 3D 物體表面的位置定位問題,要保存 3D 物體的顏色值等頂點信息可用 VC++語言的結構體來表示。當頂點的顏色值確定以后,三角形面的內(nèi)部點的顏色值就可以通過某種插值方法計算出來,從而整個 3D 物體表面上的點的顏色值也就確定下來了。此外,考慮到光照對 3D 物體表面顏色的影響,通常需要根據(jù)具體的三角形面的頂點坐標數(shù)據(jù),計算出頂點處的法向量。因為一個頂點往往是多個鄰接三角形面的公共交點,因此,頂點處的法向量通常是一個平均法向量。世界坐標系局部坐標系 2局部坐標系 1圖 世界坐標系與局部坐標系的關系 圖 頂點的法向量把頂點的法向量和光線的方向向量作某種數(shù)學運算,就可修正該頂點光源貢獻的實際顏色值。由此,頂點的結構體必須添加一個反映其上法向量的變量域。這一步通常需要將網(wǎng)絡化的 3D 物體從各自的局部坐標系中放入同一個世界坐標系中,并通過相應的數(shù)學計算(平移變換)得出 3D 物體在世界坐標系中的頂點坐標,并按光照模型計算出每個頂點的顏色值。從以上的討論很自然地引出如下的幾個待解決的 3D 數(shù)學問題:平移坐標變換的坐標計算問題。已知點在一個坐標系下的坐標值,計算在另一個平移坐標系下的新坐標。法向量的計算,如何根據(jù)已知的三個點坐標,計算出所在平面的法向量。點和向量的統(tǒng)一表示,尋找一種可以統(tǒng)一三維空間中點和向量的表示方法,使得點和向量的坐標計算在形式上能統(tǒng)一起來,并且保證運算上的形式簡潔。三維場景的空間范圍可以是無限的,計算機屏幕的大小卻是有限的。因而不可能,也不需要把三維場景中的物體同時在有限的屏幕上全部顯示出來。這就要求對三維場景進行必要的可視范圍的選擇。顯然這是符合人對周圍環(huán)境觀察特性的,不同角度、不同距離看同一景致,會產(chǎn)生不同的視覺圖像。于是,就有必要在世界坐標系中引入一個觀察者來確定當前哪些場景物體應該被顯示出來。這個觀察者也可以理解為照相機或攝影機。觀察者可由世界坐標系中的一個點和一個指示觀察方向的向量來決定。如圖 所示。從觀察者位置出主,沿著視線的觀察方向可構造一個棱錐體的視覺區(qū)域,此時,再通過一個遠平面和一個近平面進行截割,形成一個去除了錐頭的棱臺體,這個棱臺體就是觀察進的可見區(qū)域范圍。如圖 所示,其中遠平面和近平面又稱為遠視截圖和近視截圖。而棱臺體又稱為視截體。遠視截面近視截面觀察者圖 決定觀察可風區(qū)域的視截體垂直視角 a除了遠、近兩個視截面限制了可見范圍的縱深外,還需要利用視域的垂直視角a 來限制在垂直方向上張開的視角區(qū)域大小。至于視域的寬度限制則不使用角度來說明,而是采用任一截平面的寬高比率 Aspect 來指定。為了不使透視投影后的圖像在計算機屏幕上顯示時產(chǎn)生比例失真,Aspect 一般取值為屏幕的寬高比,即Aspect=顯示器屏幕寬度/顯示器屏幕高度。視截體確定以后,下一步就要對三維物體的哪些三角形面需要顯示出來或部分顯示出來,哪些三角形面由于位于視截體外而不需要進行顯示進行計算分析,這個過程稱為三維剪裁。觀察者及其觀察方向圖 世界坐標系下的觀察者位置及觀察方向為了方便三維剪裁的處理,首先需要對視截體的 6 個面(左側(cè)面、右側(cè)面、頂面、底面、近視截面和遠視截面)的坐標方程進行簡化。為此,在觀察者處建立一個所謂的攝影坐標系,并使其 z 軸方向指向觀察方向,如圖 所示。xyz圖 攝影坐標系在攝影坐標系下,左側(cè)面、右側(cè)面、頂面和底面由于都經(jīng)這坐標原點,因此它們的坐標方程都簡化為一個齊次方程(如 ax+by+c=0) ,而近視和遠視截面的方程式更簡單,為 z=n 和 z=f 的形式,這也是選擇 z 軸指向觀察方向的原因。這里,自然也會提出如下 4 個 3D 數(shù)學問題:如何從數(shù)學上描述攝影坐標系與世界坐標系的關系。已知的世界坐標系下的點的坐標在攝影坐標系下的坐標值應如何計算出來。已知在攝影坐標系下的視截體的 6 個面的方程式,如何逆向計算出這些面在世界坐標系下的方程。在攝影坐標系下,如