版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、<p> 畢業(yè)設計(論文)任務書</p><p> 發(fā)任務書日期:2008年10月20日</p><p><b> 任務書填寫要求</b></p><p> 1.畢業(yè)設計(論文)任務書由指導教師根據(jù)各課題的具體情況指導學生填寫。此任務書應在畢業(yè)設計(論文)開始前一周內(nèi)填好并發(fā)給學生;</p><p>
2、 2.任務書內(nèi)容必須用黑墨水筆工整書寫或按教務處統(tǒng)一設計的電子文檔標準格式(可從教務處網(wǎng)頁上下載)打印,不得隨便涂改或潦草書寫,禁止打印在其它紙上后剪貼;</p><p> 3.任務書內(nèi)填寫的內(nèi)容,必須和學生畢業(yè)設計(論文)完成的情況相一致,若有變更,應當經(jīng)過所在專業(yè)及系主管領導審批后方可重新填寫;</p><p> 4.任務書內(nèi)有關(guān)“系別”、“專業(yè)”等名稱的填寫,應寫中文全稱,不能寫
3、數(shù)字代碼。學生的“學號”要寫全號(2000級為10位數(shù)),不能只寫最后2位或1位數(shù)字;</p><p> 5.任務書內(nèi)“主要參考文獻”的填寫,應按照國標GB 7714—87《文后參考文獻著錄規(guī)則》的要求書寫,不能有隨意性;</p><p> 6.有關(guān)年月日等日期的填寫,應當按照國標GB/T 7408—94《數(shù)據(jù)元和交換格式、信息交換、日期和時間表示法》規(guī)定的要求,一律用阿拉伯數(shù)字書寫。
4、如“2004年3月15日”或“2004-03-15”。</p><p> 畢 業(yè) 設 計(論 文)任 務 書</p><p> 畢 業(yè) 設 計(論 文)任 務 書</p><p> 畢 業(yè) 設 計(論 文)任 務 書</p><p> 基于Direct3D的Windows游戲開發(fā)</p><p><b&g
5、t; 摘 要</b></p><p> 隨著電腦繪圖技術(shù)的不斷發(fā)展,3D繪圖硬件效能的增強以及寬帶網(wǎng)絡的普及,3D技術(shù)的應用也有了新的風貌。3D技術(shù)的使用非常廣泛,而且使用比較普遍的可能就是在3D游戲的制作領域。并且隨著電腦硬件的不斷升級和游戲開發(fā)庫的功能日益強大,游戲的真實性場景和炫麗的效果不斷沖擊著游戲玩的視角。</p><p> DirectX是一種應用程序接口(
6、API),它可讓以windows為平臺的游戲或多媒體程序獲得更高的執(zhí)行效率,加強3d圖形和聲音效果,并提供設計人員一個共同的硬件驅(qū)動標準,讓游戲開發(fā)者不必為每一品牌的硬件來寫不同的驅(qū)動程序,也降低用戶安裝及設置硬件的復雜度。</p><p> 本論文介紹游戲開發(fā)庫DirectX相關(guān)技術(shù)。及勇者斗惡龍開發(fā)前期的策劃和設計,并且較為詳細介紹了游戲各個功能的實現(xiàn)。</p><p> 關(guān)鍵詞:
7、3D;Windows游戲;DirectX;骨骼動畫</p><p> Progamming Games with Direct3D</p><p><b> Abstract</b></p><p> With computer graphics technology development, 3D graphics hardware p
8、erformance enhancements as well as the popularization of broadband networks, 3D technology also has a new outlook. 3D technology is widely used, but use may be more common in the field of 3D game production. And with the
9、 continuing escalation of computer hardware and game developers increasingly powerful function library, the authenticity of scenes and Games Behind the effect of constant impact on the game play perspective. </p>
10、<p> DirectX is an application programming interface (API), which allows to windows as a platform for games or multimedia programs to achieve higher efficiency in the implementation and strengthening 3d graphics an
11、d sound effects, and to provide designers a common hardware-driven standards for the Games developers do not have for each brand of hardware to write a different driver, but also lowers the user to install and set up the
12、 hardware complexity. </p><p> In this paper, introduce DirectX game development library related technology. And Dragon Quest pre-development planning and design, and more detailed information on the implem
13、entation of each functional Games.</p><p> Key words: 3D;Windows’Game;DirectX; Skeletal Animation</p><p><b> 目 錄</b></p><p><b> 1緒 論1</b></p>
14、<p><b> 1.1背景1</b></p><p> 1.2我國游戲的現(xiàn)狀和未來趨勢1</p><p> 1.3論文的主要工作2</p><p><b> 2總體方案3</b></p><p> 2.1Microsoft Visual C++ 簡介3<
15、;/p><p> 2.2DirectX簡介4</p><p><b> 3游戲策劃5</b></p><p> 3.1游戲的簡要介紹5</p><p> 3.2背景和情節(jié)5</p><p> 3.3游戲各個角色和物品的素材6</p><p> 3
16、.3.1角色和物品6</p><p> 3.3.2物品6</p><p> 3.4場景設計7</p><p> 3.5游戲UI8</p><p> 4游戲設計與實現(xiàn)10</p><p> 4.1游戲基本流程10</p><p> 4.2游戲的實現(xiàn)及相關(guān)概念
17、10</p><p> 4.2.1地形的實現(xiàn)10</p><p> 4.2.2天空盒的現(xiàn)實13</p><p> 4.2.3UI的實現(xiàn)14</p><p> 4.2.4下雪效果的實現(xiàn)19</p><p> 4.2.5角色模型的實現(xiàn)20</p><p> 4.2.6
18、靜態(tài)模型的實現(xiàn)26</p><p> 4.2.7聲音系統(tǒng)的實現(xiàn)27</p><p> 4.2.8碰撞檢測的實現(xiàn)28</p><p> 4.2.9AI的實現(xiàn)28</p><p> 4.2.10拾取系統(tǒng)的實現(xiàn)29</p><p><b> 5總 結(jié)31</b><
19、/p><p><b> 參考文獻32</b></p><p><b> 致 謝33</b></p><p><b> 緒 論</b></p><p><b> 背景</b></p><p> 隨著電腦繪圖技術(shù)的不斷演進,
20、3D繪圖硬件效能的增強以及寬帶網(wǎng)絡的普及,3D技術(shù)的應用也有了新的風貌。目前3D技術(shù)的使用非常廣泛,它已經(jīng)成為各界研究、應用的主題,3D應用發(fā)展縱然也就成為了時勢所趨最熱門的研究話題,也是各行業(yè)努力的方向,它的發(fā)展主題跨及了制造設計、電子商務、動畫制作、多媒體教學、虛擬現(xiàn)實以及游戲行業(yè)等。</p><p> 3D技術(shù)滿足了人們在視覺上擬真的需求,目前市場上可見的3D技術(shù)的應用包括:單機游戲、網(wǎng)絡多人聯(lián)機游戲、虛
21、擬社群、訓練模擬、科學可視化、網(wǎng)站廣告、網(wǎng)絡商品3D顯現(xiàn)、行動式裝置(PDA或是手機)游戲、廣告動畫、3D特效合成、3D動畫影集或3D動畫電影等。從上述的應用層面分析,3D技術(shù)一個較大的應用市場在于娛樂軟件與3D動畫特效制作等。在這樣一個科技迅猛發(fā)展、3D技術(shù)廣泛應用的信息時代,我們的生活每天都在發(fā)生變化,游戲業(yè)迅速發(fā)展就是其中不可忽視的一個方面,尤其是3D技術(shù)在游戲中的運用。如今國內(nèi)的游戲產(chǎn)業(yè)也在突飛猛進,3D游戲?qū)⑹鞘澜缇W(wǎng)絡游戲的發(fā)
22、展趨勢,因此3D技術(shù)的使用也將會變得更加普及。</p><p> 我國游戲的現(xiàn)狀和未來趨勢</p><p> 游戲產(chǎn)業(yè)處于整個動漫游戲產(chǎn)業(yè)的末端,一度被視為動漫產(chǎn)業(yè)的衍生產(chǎn)業(yè)。2000年國務院部署開展的電子游戲經(jīng)營場所專項治理至今余波未消,停止審批并大力壓減電子游戲經(jīng)營場所數(shù)量,禁止進口電子游戲設備及其零附件,電子游戲在中國處于極度萎縮的狀況,單機版游戲則由于猖獗的盜版問題而難以實現(xiàn)盈
23、利??v觀中國游戲產(chǎn)業(yè)的發(fā)展現(xiàn)狀,網(wǎng)絡游戲依然是執(zhí)牛耳者。截止到2006年6月30口,中國互聯(lián)網(wǎng)網(wǎng)民人數(shù)達到了12300萬人,與2005年同期相比增長了19.4%,其中寬帶上網(wǎng)網(wǎng)民人數(shù)為7700萬人,在所有網(wǎng)民中的比例接近2/3,比2005年同期增加了2400萬人,增長率為45.3%,而寬帶上網(wǎng)的計算機數(shù)也迅速增長到2815萬臺,我國真正迎來了“寬帶時代”。網(wǎng)民中網(wǎng)絡游戲玩家超過了3000萬人。2005年中國游戲產(chǎn)業(yè)報告顯示,我國網(wǎng)絡游戲
24、用戶的主要年齡段集中在19~25歲,其中19~22歲的占33.3%,23~25歲的占28.4%,加起來超過60%。對網(wǎng)民的上網(wǎng)地點分析發(fā)現(xiàn),網(wǎng)吧已經(jīng)成為網(wǎng)絡游戲發(fā)展的重地。</p><p> 根據(jù)IDC預測,2006年中國網(wǎng)絡游戲市場規(guī)模將達到50億元,這個數(shù)字低于其先前的預計。網(wǎng)絡游戲的發(fā)展強勢帶動了相關(guān)產(chǎn)業(yè)的發(fā)展,據(jù)《2005年中國游戲產(chǎn)業(yè)報告》披露,2005年網(wǎng)絡游戲?qū)ο嚓P(guān)產(chǎn)業(yè)的總體貢獻為319.8億元。
25、其中,對通信業(yè)務的直接貢獻是173.4億元,對IT產(chǎn)業(yè)的直接貢獻是71.6億元,對媒體和傳統(tǒng)出版業(yè)的直接貢獻是37.1億元;網(wǎng)絡游戲產(chǎn)業(yè)對這三個產(chǎn)業(yè)的貢獻分別比2004年增加了22.7億元、7.9億元和1.3億元。此外,2005年網(wǎng)絡游戲還帶來了 37.7億元的游戲廣告收入。 </p><p> 2006年中國網(wǎng)絡游戲發(fā)展中也呈現(xiàn)出如下特點。</p><p> (1)國產(chǎn)化比例提高,國
26、產(chǎn)網(wǎng)游數(shù)量繼續(xù)增長。據(jù)統(tǒng)計,目前在中國上市的200款網(wǎng)絡游戲中,國產(chǎn)網(wǎng)游占54.5%,韓國網(wǎng)絡游戲的比例已經(jīng)降低到35.7%。僅從數(shù)量上看,國產(chǎn)網(wǎng)絡游戲已經(jīng)占據(jù)了半壁江山。這是文化部、信息產(chǎn)業(yè)部等有關(guān)部門積極實施民族游戲精品工程,支持鼓勵民族原創(chuàng)游戲發(fā)展的結(jié)果。但是,國產(chǎn)網(wǎng)絡游戲的質(zhì)量還需要不斷提高,從下載排名來看,在名列前12位網(wǎng)絡游戲中,國產(chǎn)游戲權(quán)占4席。</p><p> (2)休閑類游戲已成為中國網(wǎng)絡游
27、戲市場重要的推動力量。各種棋牌類、賽車類、益智類的綠色休閑游戲相繼推出,比如《跑跑卡丁車》、《瘋狂賽車》、《連連看》等內(nèi)容遠遠超過了一些大型角色扮演類游戲。由于這類休閑游戲耗時短、上手容易,很快受到了國內(nèi)廣大用戶的歡迎。據(jù)預測,休閑游戲在未來五年內(nèi)將占據(jù)整個游戲產(chǎn)業(yè)總收入的50%。</p><p> (3)角色扮演類游戲本身類型也日益多樣化。現(xiàn)在已經(jīng)不是《傳奇》類的打怪練級游戲的天下,體育競技、音樂舞蹈、航海冒
28、險、星戰(zhàn)幻想系列題材內(nèi)容豐富的游戲也紛紛相繼推出,受到玩家的追捧,并占據(jù)了市場的主導。包括《大航海時代》、《星戰(zhàn)前夜》、《QQ音速》等游戲的推出,有力地推動了角色扮演類游戲的結(jié)構(gòu)調(diào)整</p><p> (4)免費游戲成為潮流。從2005年底上海盛大公司宣布對旗卜《傳奇》、《傳奇世界》、《夢幻國度》等三款游戲永久免費之后,2006年成為“免費網(wǎng)游年”。2006年中國網(wǎng)絡游戲市場上已經(jīng)有超過70款永久免費網(wǎng)游,可逐
29、漸與費網(wǎng)游相抗衡。其中包括《航海世紀》、《魔力寶貝》等原來很受玩家歡迎的老游戲,也有《武林外傳》、《征途》等新游戲。</p><p><b> 論文的主要工作</b></p><p> 通過論文的解釋說明講述基于DirectX的Windows游戲設計的過程,介紹DirectX庫的一些常用接口和游戲一些主要部分的實現(xiàn)方法。</p><p>&
30、lt;b> 總體方案</b></p><p> Microsoft Visual C++ 簡介</p><p> Visual C++是一個功能強大的可視化軟件開發(fā)工具。自1993年Microsoft公司推出Visual C++1.0后,隨著其新版本的不斷問世,Visual C++已成為專業(yè)程序員進行軟件開發(fā)的首選工具。</p><p>
31、雖然微軟公司推出了Visual C++.NET(Visual C++7.0),但它的應用的很大的局限性,只適用于Windows 2000,Windows XP和Windows NT4.0。所以實際中,更多的是以Visual C++6.0為平臺。</p><p> Visual C++6.0不僅是一個C++編譯器,而且是一個基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境(integrated developmen
32、t environment,IDE)。Visual C++6.0由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)ppWizard、類向?qū)lass Wizard等開發(fā)工具。 這些組件通過一個名為Developer Studio的組件集成為和諧的開發(fā)環(huán)境。</p><p> Visual C++它大概可以分成三個主要的部分:</p><p> Developer Studio,這是一個集
33、成開發(fā)環(huán)境,我們?nèi)粘9ぷ鞯?9%都是在它上面完成的,再加上它的標題赫然寫著“Microsoft Visual C++”,所以很多人理所當然的認為,那就是Visual C++了。其實不然,雖然Developer Studio提供了一個很好的編輯器和很多Wizard,但實際上它沒有任何編譯和鏈接程序的功能,真正完成這些工作的幕后英雄后面會介紹。我們也知道,Developer Studio并不是專門用于VC的,它也同樣用于VB,VJ,VID等
34、Visual Studio家族的其他同胞兄弟。所以不要把Developer Studio當成Visual C++, 它充其量只是Visual C++的一個殼子而已。</p><p> MFC。從理論上來講,MFC也不是專用于Visual C++,Borland C++,C++Builder和Symantec C++同樣可以處理MFC。同時,用Visual C++編寫代碼也并不意味著一定要用MFC,只要愿意,用V
35、isual C++來編寫SDK程序,或者使用STL,ATL,一樣沒有限制。不過,Visual C++本來就是為MFC打造的,Visual C++中的許多特征和語言擴展也是為MFC而設計的,所以用Visual C++而不用MFC就等于拋棄了Visual C++中很大的一部分功能。但是,Visual C++也不等于MFC。</p><p> Platform SDK。這才是Visual C++和整個Visual S
36、tudio的精華和靈魂,雖然我們很少能直接接觸到它。大致說來,Platform SDK是以Microsoft C/C++編譯器為核心(不是Visual C++,看清楚了),配合MASM,輔以其他一些工具和文檔資料。上面說到Developer Studio沒有編譯程序的功能,那么這項工作是由誰來完成的呢?是CL,是NMAKE,和其他許許多多命令行程序,這些我們看不到的程序才是構(gòu)成Visual Studio的基石。</p>&
37、lt;p> Visual C++ 2005。微軟的Visual C++2005發(fā)布版本對于有志于輕松、迅速地編寫安全可靠的應用程序的編程愛好者來說是正確地選擇。正如你所聽到的那樣,Visual C++中語言和庫的新特點使開發(fā)安全、可靠的應用程序比以前更容易。它即提供了功能強大并且靈活的標準C++,又提供了適于.NET框架下編程的最強大的開發(fā)語言。</p><p><b> DirectX簡介&
38、lt;/b></p><p> DirectX是由微軟公司建立的游戲編程接口。由C++編程語言實現(xiàn),遵循COM。在Windows的平臺上影響力超越OpenGL并被多數(shù)PC 游戲開發(fā)商采用。最新版本DirectX9.0c (2006年12月13日)。另外,Windows Vista第5238版亦包含有 DirectX 10 的 Beta&
39、#160;版。 很多Windows游戲需要DirectX。DirectX包含DirectGraphic、DirectPlay、 DirectSound、DirectInput、DirectSetup等部份。 (Direct3D與DirectDraw已整合成DirectGraphic,而DirectShow亦已自原本的DirectX SDK中移到Windows平臺SDK了。 Redist
40、Package 是媒體開發(fā)底層API,通過它可以開發(fā)游戲和其它媒體應用程序。</p><p> DirectX并不是一個單純的圖形API,它是由微軟公司開發(fā)的用途廣泛的API,它包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Dir
41、ect Show、Direct Setup、Direct Media Objects等多個組件,它提供了一整套的多媒體接口方案。只是其在3D圖形方面的優(yōu)秀表現(xiàn),讓它的其它方面顯得暗淡無光。DirectX開發(fā)之初是為了彌補Windows 3.1系統(tǒng)對圖形、聲音處理能力的不足,而今已發(fā)展成為對整個多媒體系統(tǒng)的各個方面都有決定性影響的接口。</p><p> Dire
42、ctX 是一組低級“應用程序編程接口 (API)”,可為 Windows 程序提供高性能的硬件加速多媒體支持。Windows 支持 DirectX 8.0,它能增強計算機的多媒體功能。使用 DirectX 可訪問顯卡與聲卡的功能,從而使程序可提供逼真的三維 (3D) 圖形與令人如醉如癡的音樂與聲音效果。</p>&
43、lt;p><b> 游戲策劃</b></p><p><b> 游戲的簡要介紹 </b></p><p> 游戲利用一個高度圖文件來形成高低不同的地型再配以紋理圖片制造出一個雪地的環(huán)境。使用了6張?zhí)炜盏募y理圖片制作一個天空盒,天空盒的中心位置是游戲中英雄的位置,所以天空盒相對英雄角色是靜止的。加入了一個粒子系統(tǒng)模擬一個下雪的過程,再加
44、上一些樹的模型就構(gòu)成了游戲的場景了。</p><p> 游戲中的英雄角色和怪物角色的動作是使用了蒙皮骨骼動畫技術(shù)。通過該技術(shù)可以隨意的控制角色的動作和在動作發(fā)生的過程中產(chǎn)生所需要的事件(如攻擊時播放攻擊的音樂,計算角色在攻擊動作發(fā)生后將自身的生命值減去傷害值)。</p><p> 游戲中采用的了第三人稱視覺,玩家在電腦屏幕上看到的畫面就是通過游戲里的攝像機拍攝出來的。攝像機會跟隨英雄角
45、色移動,也可以360度環(huán)繞英雄角色改變視覺的位置。</p><p> 游戲UI使用了點精靈實現(xiàn)角色的狀態(tài)顯示欄,并加以文字描述。游戲構(gòu)建了聲音系統(tǒng),聲音系統(tǒng)由背景音樂、英雄角色動作音樂、還有NPC動作音樂組成。游戲給NPC設定了AI,NPC可以根據(jù)情況做出不同的反應和動作。</p><p> 在游戲過程中。玩家可以控制英雄角色在場景中自由移動。當英雄角色進入NPC的防范距離時NPC會主
46、動接近英雄角色。當NPC到了攻擊范圍時會主動攻擊英雄角色。當玩家選定了要攻擊的目標時,進入到攻擊有效范圍可就以進行攻擊。游戲會自己計算傷害然后在角色狀態(tài)欄中相應顯示。當NPC血量為0時會死亡隨機掉出物品該物品可以回復英雄角色的血量,當英雄角色為血量為0量也會死亡,并在數(shù)秒后顯示游戲結(jié)束界面。</p><p><b> 背景和情節(jié)</b></p><p> 游戲發(fā)生
47、在一個魔幻的世界,英雄所在的村莊受到一條邪惡的冰龍破壞。本來小村莊里的人民過幸福的生活,但自從冰龍來了以后村莊變成一個冰封的世界。一位青年的英雄為了解救村莊,他拿起手中的劍與冰龍還有冰龍的手下開展了一場生死的搏斗。</p><p> 游戲各個角色物品和各場景的素材</p><p><b> 角色的設計</b></p><p> 游戲中的角
48、色如下表所示:</p><p> 表 3-1 角色屬性</p><p><b> 物品的設計</b></p><p> 游戲中增加英雄體力的物品蘋果如下圖所示:</p><p><b> 圖3-1 物品蘋果</b></p><p><b> 場景的設計&l
49、t;/b></p><p> 游戲中的天空盒圖片前和后如下圖所示:</p><p> 圖 32 天空盒圖片前 圖 33 天空盒圖片后</p><p> 游戲中的天空盒圖片右和左如下圖所示:</p><p> 圖 34 天空盒圖片右
50、 圖 35 天空盒圖片右</p><p> 游戲中的天空盒圖片上和下如下圖所示:</p><p> 圖 36 天空盒圖片上 圖 37 天空盒圖片下</p><p> 游戲中的樹模型如下圖所示:</p><p> 圖 38 樹模
51、型</p><p> 游戲中的房子模型如下圖所示:</p><p> 圖 39 房子模型</p><p><b> 游戲UI的設計</b></p><p> 游戲中的開始與結(jié)束界面如下圖所示: </p><p> 圖 3
52、10 游戲開始界面 圖 311 游戲結(jié)束界面</p><p> 游戲中的各角色狀態(tài)欄如下圖所示:</p><p> 圖 312 游戲中各角色態(tài)欄</p><p> 游戲中的按鈕和HP血量條如下圖所示:</p><p> 圖 313 按鈕
53、 圖 314 HP血量條</p><p><b> 游戲設計與實現(xiàn) </b></p><p><b> 游戲基本流程 </b></p><p> 圖4-1 基本流程圖</p><p> 游戲的實現(xiàn)及相關(guān)概念 </p><p> 游戲
54、的實現(xiàn)主要包括了地形的實現(xiàn)、天空盒的現(xiàn)實、UI的實現(xiàn)、下雪效果的實現(xiàn)、英雄角色及NCP模型的實現(xiàn)、靜態(tài)模型的實現(xiàn)、聲音系統(tǒng)的實現(xiàn)、AI的實現(xiàn)、碰撞檢測的實現(xiàn),拾取選定的實現(xiàn)。</p><p><b> 地形的實現(xiàn)</b></p><p> 游戲中的地形呈現(xiàn)出高低不同的起伏是利用了高度圖這一技術(shù)實現(xiàn)的。在3D游戲中坐標分為XYZ。XZ表示地平面坐標Y表示海拔高度,在
55、游戲的世界坐標系中以XYZ為一點來表示一個位置。高度是圖其實就是一個數(shù)組,該數(shù)組的每個元素都指定了地形方格中某一特定的頂點的高度值。我們高度圖視以一個矩陣,這樣高度圖中的元素就與地形柵格中的頂點一一對應。高度圖有多種可能的圖形表示,其中一種是灰度圖。地形中某一點的海拔越高,相應地該點在灰度圖中的亮度就越大。</p><p> 我們利用一個灰度圖的資源,再加上紋理就可以創(chuàng)建一個地形了。下面講述地形類General
56、Terrain的主要構(gòu)成。</p><p> class GeneralTerrain</p><p><b> {</b></p><p><b> public:</b></p><p> GeneralTerrain(int r, int c, float length); </
57、p><p> ~GeneralTerrain(void);</p><p> bool SetVertexBuffer(IDirect3DDevice9 *Device, LPCSTR rawFileName, LPCSTR </p><p> texFilename, float heightScale, bool OneTex = true); </p&
58、gt;<p> void Render(IDirect3DDevice9 *Device);</p><p> float GetHeight(int r, int l);</p><p> void ComputeTriNormal(MAPCUSTOMVERTEX &v1, MAPCUSTOMVERTEX &v2, </p><p&
59、gt; MAPCUSTOMVERTEX &v3, D3DVECTOR &normal);</p><p> float GetPositionHeight(float x, float z);</p><p> float Lerp(float a, float b, float t);</p><p> void OnDestory();
60、</p><p><b> private:</b></p><p> int num_row;//每列頂點數(shù)</p><p> int num_col;//每行頂點數(shù)</p><p> float uTexSize;//平分后的紋理U坐標</p>&
61、lt;p> float vTexSize;//平分后的紋理V坐標</p><p> IDirect3DVertexBuffer9 *m_pVertexBuffer;</p><p> IDirect3DTexture9 *Dtex;</p><p> IDirect3DIndexBuffer9 *m_pIndexBuffer;</
62、p><p> float length;//網(wǎng)格寬度</p><p> vector<float> raw;//存放高度的容器</p><p><b> };</b></p><p> GeneralTerrain 構(gòu)造函數(shù)用于初始化地形中行的點數(shù)和列的點數(shù)還有之間的距離。S
63、etVertexBuffer用于設置地形紋理,Device是設備指針,rawFileName是文件路徑,texFilename是紋理資源的路徑,heightScale是高度的相對比例值,OneTex是否一張紋理顯示。Render用于渲染時調(diào)用。GetHeight用于得到指定的行列相交點的高度。ComputeTriNormal用于計算向點法向量。GetPositionHeight用于得到世界坐標系中的高度。Lerp用于線性插值。</
64、p><p> 當程序加載了高度圖和紋理之后,就可以顯示在游戲中。我們在主程序中加入GeneralTerrain *terrain這個變量,然后在主程序的OnCreateDevice函數(shù)中對terrain進行初始化,在主程序的OnFrameRender調(diào)用terrain的Render函數(shù)進行渲染。當游戲結(jié)果時在主程序的OnDestroyDevice中調(diào)用terrain的OnDestory來釋放資源。而游戲中的角色和物
65、體的高度就可以通過GetPositionHeight傳入自己在世界坐標系中的XZ坐標來得到對應的高度,從而構(gòu)成3D游戲中的三維坐標。</p><p> 下面講述GeneralTerrain的渲染函數(shù)Render的實現(xiàn)</p><p> void GeneralTerrain::Render(IDirect3DDevice9 *Device)</p><p>&l
66、t;b> {</b></p><p> Device->SetTexture(0,Dtex);//將地形紋理選入設備。</p><p> Device->SetStreamSource(0,m_pVertexBuffer,0,sizeof(MAPCUSTOMVERTEX));//將地</p><p> 形頂點緩存選入設備。<
67、;/p><p> Device->SetIndices(m_pIndexBuffer);//將地形頂點索引選入設備</p><p> Device->SetFVF(MAPCUSTOMVERTEX_FVF);//設置頂點格式</p><p> D3DXMATRIX I;</p><p> D3DXMatrixIdentity(&
68、amp;I);</p><p> Device->SetTransform(D3DTS_WORLD, &I);//設備世界坐標系坐標</p><p> Device->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, </p><p> 0,this->num_col*this->num_r
69、ow,0,(this->num_col-1)*(this->num_row-1)*2);//渲染地形</p><p><b> }</b></p><p> 下面講述GeneralTerrain的渲染函數(shù)GetPositionHeight的實現(xiàn)</p><p> float GeneralTerrain::GePositio
70、nHeight(float x, float z)</p><p><b> {</b></p><p> //將地圖移動到原點,方便計算</p><p> x = ((float)(num_col-1)*length / 2.0f) + x;</p><p> z = ((float)(num_row-1)*l
71、ength / 2.0f) - z;</p><p> //將地圖大小單位化,方便計算</p><p> x /= (float)length;</p><p> z /= (float)length;</p><p> //計算x,z坐標所在的行列值</p><p> float col = ::floor
72、f(x);</p><p> float row = ::floorf(z);</p><p> // 獲取如下圖個頂點的高度</p><p><b> // </b></p><p><b> // A B</b></p><p><b> //
73、 *---*</b></p><p><b> // | / |</b></p><p> // *---* </p><p><b> // C D</b></p><p> loat A = GetHeight((int)row, (int)col);<
74、/p><p> float B = GetHeight((int)row, (int)col+1);</p><p> float C = GetHeight((int)row+1, (int)col);</p><p> float D = GetHeight((int)row+1, (int)col+1);</p><p> f
75、loat dx = x - col;</p><p> float dz = z - row;</p><p> float height = 0.0f;</p><p> if(dz < 1.0f - dx)//(x,z)點在ABC三角形上</p><p><b> {</b></p>&l
76、t;p> float uy = B - A;</p><p> float vy = C - A;</p><p> height = A + Lerp(0.0f, uy, dx) + Lerp(0.0f, vy, dz);//線形插值得到高度</p><p><b> }</b></p><p> el
77、se//(x,z)點在BCD三角形上</p><p><b> {</b></p><p> float uy = C - D;</p><p> float vy = B - D;</p><p> height = D + Lerp(0.0f, uy, 1.0f - dx) + Lerp(0.0f, vy,
78、1.0f - dz);</p><p><b> }</b></p><p> return height;</p><p><b> }</b></p><p><b> 天空盒的現(xiàn)實</b></p><p> 天空盒實現(xiàn)就是一個擁有6張帶
79、有遠景的UV紋理的大正方形盒子,盒子包圍著大部分的游戲場景。當英雄角色移動時盒子跟隨移動。下面講述天空類BoxSky的實現(xiàn)</p><p> class BoxSky</p><p><b> {</b></p><p><b> public:</b></p><p><b>
80、BoxSky();</b></p><p> ~BoxSky(void);</p><p> void OnDestroy();</p><p><b> //創(chuàng)建紋理及頂點</b></p><p> bool SetVertexBuffer(IDirect3DDevice9 *Device, LPC
81、STR fontFileName, LPCSTR </p><p> backFileName, LPCSTR leftFileName, LPCSTR rightFileName, LPCSTR topFileName, </p><p> LPCSTR bottomFileName, float skywidth, float skyheight);</p><
82、p> void Render(IDirect3DDevice9 *Device, D3DXMATRIX *pos=NULL); //渲染</p><p><b> private:</b></p><p> IDirect3DTexture9 *Skytex[6];</p><p> IDirect3DVertexBuffer9
83、*m_pVertexBuffer;</p><p><b> };</b></p><p> SetVertexBuffer用于加載天空盒中的六張圖片資源和設置天空盒相對中世界坐標系中的長和寬。Render用于渲染天空盒。參數(shù)pos表示在世界坐標系中的位置矩陣也就是天空盒的中心位置。</p><p> 當程序加載了天空盒的圖片資源后,將圖
84、片設置成對應的UV紋理和設定好相對位置就可以顯示在游戲中。我們在主程序中加入BoxSky boxsky這個變量,然后在主程序的OnCreateDevice函數(shù)中對boxsky進行初始化將相對位置設置成5000個坐標單位,在主程序的OnFrameRender調(diào)用boxsky的Render函數(shù)進行渲染在渲染的時候傳入英雄角色的坐標就可以在世界坐標系中決定天空盒的顯示位置。當游戲結(jié)果時在主程序的OnDestroyDevice中調(diào)用boxsky
85、的OnDestory來釋放資源。</p><p> 下面講述BoxSky的渲染函數(shù)Render的實現(xiàn)</p><p> void BoxSky::Render(IDirect3DDevice9 *Device, D3DXMATRIX *pos)</p><p><b> {</b></p><p> //設置紋理
86、尋址模式</p><p> Device->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);</p><p> //設置世界坐標系中的坐標</p><p> if(pos == NULL)</p><p><b> {</b>
87、</p><p> D3DXMATRIX temp;</p><p> D3DXMatrixIdentity(&temp);</p><p> Device->SetTransform(D3DTS_WORLD, &temp);</p><p><b> }</b></p>&l
88、t;p><b> else</b></p><p><b> {</b></p><p> Device->SetTransform(D3DTS_WORLD, pos);</p><p><b> }</b></p><p> //加載頂點緩存,和頂點格式
89、,關(guān)閉光源。</p><p> Device->SetStreamSource(0,this->m_pVertexBuffer,0,sizeof(CUSTOMVERTEX));</p><p> Device->SetFVF(CUSTOMVERTEX_FVF);</p><p> Device->SetRenderState(D3DRS
90、_LIGHTING, false);</p><p> //循環(huán)顯示天空盒中的各個面</p><p> for(int i = 0; i<6; i++)</p><p><b> {</b></p><p> Device->SetTexture(0, Skytex[i]);</p>&
91、lt;p> Device->DrawPrimitive(D3DPT_TRIANGLESTRIP,i*4,2);</p><p><b> }</b></p><p> Device->SetRenderState(D3DRS_LIGHTING, true);//設置設備光源為開啟</p><p><b> }
92、</b></p><p><b> UI的實現(xiàn)</b></p><p> 游戲中的UI是使用了DirectX里的一個ID3DXSprite接口來實現(xiàn)的。ID3DXSprite是DriectX 9.0里面的一個簡單模塊,在DriectX 9.0幫助文檔里面對其功能的描述為:“向用戶提供一套簡單的在屏幕上實現(xiàn)精靈渲染的接口?!焙螢榫`渲染,說白了就是渲染2
93、D畫面,ID3DXSprite幫助用戶透過簡單的操作就能運用DriectX 9.0制作2D游戲(渲染2D圖形),ID3DXSprite的功能還包括:幫助用戶在3D游戲里面實現(xiàn)“公告牌”技術(shù)。游戲中正是利用了“公告牌”技術(shù)再配合自定制的按鈕和文字系統(tǒng)來實現(xiàn)游戲的啟動界面、游戲結(jié)束界面、角色狀態(tài)欄的UI界面。</p><p> ID3DXSprite的使用過程一般如下:一、利用D3DXCreateSprite函數(shù)得
94、到一個ID3DXSprite的實例對象。二、加載相關(guān)的要顯示的UI紋理。三、設置顯示屬性。四、顯示渲染UI。五、回收資源。游戲中對ID3DXSprite的使用封裝了一個CSprite類,下面來講述游戲中的UI類CSprite的實現(xiàn)</p><p> class CSprite</p><p><b> {</b></p><p><b
95、> public:</b></p><p> CSprite();</p><p> ~CSprite();</p><p> HRESULT Init(IDirect3DDevice9* pd3dDevice);</p><p> HRESULT LoadTexture(IDirect3DDevice9 *pd3
96、dDevice,UINT index,LPCWSTR sthPath);</p><p> HRESULT Render(UINT Index);</p><p> D3DXVECTOR2 SetPosition(D3DXVECTOR2*pos);</p><p> D3DXVECTOR2* GetPosition();</p><p>
97、; float SetAngle(float angle);</p><p> float GetAngle();</p><p> D3DXVECTOR2 SetSize(D3DXVECTOR2*size);</p><p> D3DXVECTOR2* GetSize();</p><p> void OnLostDevice()
98、;</p><p> void Destory();</p><p> void SetIsRender(bool isrender);</p><p> bool IsRender();</p><p><b> private:</b></p><p> UINT m_TexInde
99、x;//當前要渲染的索引</p><p> ID3DXSprite* m_pPicSprite;//實例指針</p><p> LPDIRECT3DTEXTURE9 m_pTex[9];//UI紋理數(shù)組</p><p> float m_angle;//旋轉(zhuǎn)角度</p><p> bool m_isRender;//是否渲染標志<
100、;/p><p> D3DXVECTOR2 m_size;//顯示大小</p><p> D3DXVECTOR2 m_position;//顯示位置</p><p><b> };</b></p><p> Init用于得到ID3DXSprite的實例對象。LoadTexture用于加載要顯示的UISetPositi
101、on、GetPosition用于設置或得到某特定UI在游戲窗口中的二維坐標(注:窗口左上角的坐標為(0,0))。SetSize用于設置某特定UI的大小。</p><p> 當游戲加載了指定的UI圖片時,就可以根據(jù)程序的需要來顯示相應的UI界面我們在主程序中加入CSprite*g_pBillBoard這個變量。在OnCreateDevice里new一個CSprite的實例對象并將指針傳給pBillBoard,調(diào)用
102、pBillBoard的LoadTexture函數(shù)來加載UI資源。在OnResetDevice里調(diào)用pBillBoard的Init函數(shù)來實例化ID3DXSprite對象。OnLostDevice里調(diào)用pBillBoard的OnLostDevice函數(shù),當游戲結(jié)束時在OnDestroyDevice里調(diào)用pBillBoard的Destory函數(shù)回收資源。主程序中添加了一個全局函數(shù)RenderUI用于渲染UI時做相關(guān)的設置。只要在OnFrame
103、Render函數(shù)里添加RenderUI函數(shù)就可以顯示相應的UI了。下面展示出RenderUI函數(shù)的內(nèi)容,說明如何顯示相應的UI。</p><p> 下面講述CSprite的渲染函數(shù)Render的實現(xiàn)</p><p> HRESULT CSprite::Render(int Index)</p><p><b> {</b></p&g
104、t;<p> HRESULT hr;</p><p> //設置UI在窗口中的二維坐標</p><p> D3DXMATRIX mat;</p><p> D3DXMatrixTransformation2D(&mat, NULL, m_angle, &m_size,</p><p> NULL, 0,
105、 &m_position); </p><p> m_pPicSprite->SetTransform(&mat);</p><p> //設置啟用ALPAHA通道,并渲染</p><p> m_pPicSprite->Begin(D3DXSPRITE_ALPHABLEND );</p><p>
106、hr=m_pPicSprite->Draw(m_pTex[Index],NULL , NULL,NULL, 0xffffffff);</p><p> m_pPicSprite->End();</p><p> return hr;</p><p><b> }</b></p><p> 程序添加了一
107、個BillBoardInfo結(jié)構(gòu)的全局變量用于控制UI的顯示。BillBoardInfo結(jié)構(gòu)的內(nèi)容如下:</p><p> struct BillBoardInfo</p><p><b> {</b></p><p> BillBoardInfo()</p><p><b> {</b>&
108、lt;/p><p> herobloodPercent=_monsterbloodPercent=_monsterbloodPercent=0;</p><p><b> };</b></p><p> float _herobloodPercent;//英雄角色狀態(tài)欄中血量條的當前血量顯示百分比</p><p>
109、float _monsterbloodPercent;//怪物角色狀態(tài)欄中血量條的當前血量顯示百分比</p><p> float _MonsterIndex;//要顯示的怪物狀態(tài)欄索引</p><p><b> };</b></p><p> 下面講述主程序中的RenderUI函數(shù)的實現(xiàn)</p><p> vo
110、id RenderUI()</p><p><b> {</b></p><p> //判游戲是否開始,如果是剛根據(jù)情況渲染角色狀態(tài)欄</p><p> if(g_bGameStart)</p><p><b> {</b></p><p> //保存舊的坐標,角度
111、和大小</p><p> D3DXVECTOR2 oldpos;</p><p> D3DXVECTOR2 oldsize;</p><p> float oldangle;</p><p> //防止顯示的血量倒流</p><p> if(g_billBoardInfo._herobloodPercent&
112、lt;=0.0f)</p><p> g_billBoardInfo._herobloodPercent=0;</p><p> if(g_billBoardInfo._monsterbloodPercent<=0.0f)</p><p> g_billBoardInfo._monsterbloodPercent=0;</p><p&
113、gt; if(g_pBillBoard->IsRender())</p><p><b> {</b></p><p><b> //設置英雄UI</b></p><p> oldpos=g_pBillBoard->SetPosition(&D3DXVECTOR2(0.0f,0.0f));&l
114、t;/p><p> oldsize=g_pBillBoard->SetSize(&D3DXVECTOR2(1.2f,1.2f));</p><p> g_pBillBoard->Render(2);</p><p> g_pBillBoard->SetPosition(&oldpos);</p><p>
115、 g_pBillBoard->SetSize(&oldsize);</p><p> oldpos=g_pBillBoard->SetPosition(&D3DXVECTOR2(145.0f,37.2f)); </p><p> oldsize=g_pBillBoard->SetSize(&D3DXVECTOR2(1.2f*g_billBoar
116、dInfo.</p><p> _herobloodPercent,1.35f));</p><p> g_pBillBoard->Render(6);</p><p> g_pBillBoard->SetPosition(&oldpos);</p><p> g_pBillBoard->SetSize(&a
117、mp;oldsize);</p><p> //設置被選怪物UI</p><p> if((g_billBoardInfo._MonsterIndex>2&&g_billBoardInfo._MonsterIndex<6))</p><p><b> {</b></p><p> ol
118、dpos=g_pBillBoard->SetPosition(&D3DXVECTOR2(450.0f,5.0f));</p><p> oldsize=g_pBillBoard->SetSize(&D3DXVECTOR2(1.2f,1.2f));</p><p> g_pBillBoard->Render(g_billBoardInfo._Monste
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于Direct3D的2D游戲開發(fā)與實現(xiàn).pdf
- 基于Direct3D的3D飛行射擊游戲研究.pdf
- 基于Direct3D的庫區(qū)景觀顯示技術(shù)研究.pdf
- 基于Direct3D與粒子系統(tǒng)實現(xiàn)噴泉效果.pdf
- 基于Direct3D的三維日照分析模型的研究與實現(xiàn).pdf
- Direct3D應用程序分析與調(diào)試軟件的研究與設計.pdf
- 基于Direct3D和MFC的DEM可視化技術(shù)研究.pdf
- 基于Direct3D的虛擬野生動物園仿真系統(tǒng)設計與實現(xiàn).pdf
- 14945.基于direct3d技術(shù)的海底地形可視化研究與實現(xiàn)
- 基于Direct3D的虛擬實驗教學平臺的關(guān)鍵技術(shù)研究.pdf
- 基于Direct3D的有限元后處理系統(tǒng)設計及其關(guān)鍵技術(shù)研究.pdf
- 畢業(yè)設計-----基于opengl的3d游戲的設計與實現(xiàn)
- 基于Unity3D的游戲開發(fā)與設計.pdf
- 基于android平臺的手機游戲開發(fā)【畢業(yè)設計】
- 畢業(yè)設計--基于android的雷電射擊游戲開發(fā)
- 基于android策略型游戲開發(fā)畢業(yè)設計
- 基于unity3d的潛行游戲開發(fā)
- 手機游戲開發(fā)畢業(yè)設計
- 基于unity3d《叢林冒險》游戲的設計與開發(fā)
- 畢業(yè)論文——基于ogre圖形渲染引擎的3d游戲開發(fā)
評論
0/150
提交評論