游戲設計文檔(場景管理)_第1頁
游戲設計文檔(場景管理)_第2頁
游戲設計文檔(場景管理)_第3頁
游戲設計文檔(場景管理)_第4頁
游戲設計文檔(場景管理)_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、城市獵人程序設計文檔組名:coders成員:于毓磊(20132085),賀俊雄(20132075),方文波(20132061),黃文(20132074),姚明輝(20132082) 程序基本結構說明數據結構:口定義結構體管理場景中的模型,定義字符數組利矩陣數組存儲各物體紋理文件路徑以及繪制 位置。struct obje|保存讀入的x文件所盂內容id3dxmesh*mesh;網格std: vector<d3 dmaterial9 >mtrls;材質std:veclor<idirect3dtexlure9*>textures;紋理坐標)objcctn;n個物體d3dmatr

2、ix wheren;存儲繪圖世界坐標lpcstr fnenamen=o戲界面.x“,”汽車.x”,“場景.x“;保存所有紋理文件路徑程序流程結構:程序模塊說明變量定義模塊主要定義繪圖所需的數據的存儲結構體,控制和繪圖所需的全局變量定義和初始化setup()®數模塊主耍完成的功能是完成繪制圖形的準備工作,包括通過循環導入所有的.x文件,包押i文件的材質,定 點索引,材質數。通過循環叫.x文件的信息全部導入到程序中。另外如果遇到異常情況拋出異常并結束程 序。并且在導入相應的.x文件以后,為導入的.x文件都建立一個其在世界坐標系的相應位置并存儲到一個 數組中。方便后續繪制兩數display

3、o的調用。另外setupo函數還負責設置紋理的過濾方式。以及設置燈光 采用的照射方式,燈光的位置,反射的方式以及燈光的開關。設置和機位置,和機角度。設置投影的方式 投影角度等等都將在這個函數中實現。cleanup。函數模塊主要完成的功能將前面分配的左右內心進行淸理操作,即施放頂點緩存和索引緩存接口等。display!)函數模塊主耍是完成場景的繪制以及場景的更新。我們想通過鍵盤控制攝像機的方向以及位置,必須在程序中 給攝像機的方向在每一幀圖像中給一定的旋轉角或位移才能實現攝像機的方向或者位置的改變。通過更新 毎一幀圖像中攝像機的位置及方向,實現視角的轉換。故后通過調用bcginsccnc()en

4、dsccnc(),在這兩 個函數z間進行場景的繪制。wndprocf)模塊主耍完成的是初始化主顯示窗口及direct3d; 調川setup()函數對應用程序進行設置;entermsgloop將di s p i ay ()函數作為上循環:執行清除操作,釋放內存,并釋放idirect3ddevice9接口對彖源程序代碼及說明/#include "d3dutility.h#inelude <vector>idirect3ddevice9* device 二 0;const int width = 640; const int height = 480;#define n 2st

5、atic float w=l of;struct objeid3dxmesh*/所需讀入 x文件數量保存讀入的 x文件所需內容mesh;網格mtrls;/材質/紋理處標objectn;lpcstr filenamen = "汽車.x”,"場景.x"d3dmatrtx where10;保存所冇紋理文件路徑/繪圖世界坐標std:vec tor<d3dmater t al9> std:vector<idirect3dtexture9*> textures;攝像頭控制static float weith = 0. of;static float h

6、eight 二 0. of;/ / framework functionsbool setup ()hresult hr = 0;for(int i=0;i<n;i+)/初始化objecti. mesh二0;)/ load the xfile data./for(int i=0;i<n;i+)/循環讀入所有.x文件/獲取繪圖所需信息/id3dxbuffer* adjbuffer = 0;/鄰接表id3dxbuffer* mtrlbuffcr = 0;/存儲材質參數dwordnummtrls = 0;/材質數=d3dxloadmeshfromx(filenamei,d3dxmesh

7、managed,device,&adjbuffer,&mtrlbuffer,0,&nummtrls,&objccti. mesh);讀.x文件辻(failed (hr)/是否讀入文件:messagebox(0, "d3dxloadmeshfromx() -failed", 0, 0); return false;)if( mtrlbuffer != 0 && nummtrls != 0 )/是否冇材質d3dxmatertal* mtrls = (d3dxmatertal*)mtrlbuffer->getburferpoi

8、nter();for(int j= 0; j < nunimtrls; j+)/ the matd3d property doesn't have an ambient value set mtrlsej. matd3d. ambient = mtrlsj. matd3d. diffuse;/ save the ith materialobjecti. mtrls. push_back( mtrlsj. matd3d );/ check if the ith material has an associative textureif ( mtrlsj. ptexturefilen

9、ame != 0 )/是否需要紋理 / yes, load the texture for the ith subset tdirect3dtexture9* tex = 0;d3dxcreatetexturefromf i1e(device,mtrlslj ptextureeilename, &tex);/ save the loaded texture objectitexturespush_back( tex );else/no texture for the ith subset objecti. textures. push_back ( 0 );)d3d:rclease&l

10、t;td3dxbuffer*>(mtrlbuffer); / done w/ buffer/ / / optimize the mesh./hr = objecti. mesh->0ptimizelnplace (/優化索引d3dxmesh0pt attrsortd3dxmesh0pt compact |d3dxmesh0pt vertexcache,(dword*)adjbuffer->getbufferpointer(),0, 0, 0);d3d:release<td3dxbuffer*>(adjbuffer); / done w/ bufferif(fail

11、ed(hr):messagebox(0, ,?optimizelnplace() - fatled", 0, 0): return false;) 循環讀入x結束/獲取繪圖世界坐標/d3dxmatrtx size, transl, trnas2, rotatl, rotat2, seal 1, seal2;d3dxmatr ixtrans 1 at ion (&t rans 1, 0, 0, too);size=transl;d3dxmatrixtranslation(&transl, 0, -100, 100);d3dxmatr ixscal i ng (fisca

12、l 1, 0. 8, 0. 5, 2. 0);size=transl*scall;where l=size;/場景/獲取坐標結束/ set texture filters./device->setsamplerstate(0, d3dsamp_magfilter, d3dtexf_linear); devi ce->setsamplerstate(0, d3dsamp mtnfilter, d3dtexf linear); device->setsamplerstate(o, d3dsamp mtpftlter, d3dtexf point);/ set lights./設置

13、燈光d3dxvect0r3 dir(1.0f, 0. of, -1. of):d3dxc0l0r col (1. of, 1. of, 1. of, 1. of);d3dl1ght9 light = d3d:initdirectionallight(&dir, &col);device->setlight(0, flight);device->lightenable(0, true);devi ce->setrenderstate(d3drs normaltzenormals, true);device >setrenderstate(d3drs spe

14、cularenabi.lt, true);/ set project!on matrix./設置投影參數/d3dxmatrix proj;d3dxmatrixperspectivefovlh(& proj,d3dx_pi * 0. 5f, / 90 - degree (float)width / (float)lleight, l.of,1500. of);devi ce>settransform(d3dts projectton, &proj);return true;淸除緩存void cleanup()for(int i = 0; i < n; i+)d3d:r

15、e1ease<id3dxmesh*>(objecti. mesh);for (int j = 0; j < objecti. textures. sizeo ; j+)d3d:release<idirect3dtexture9*>( object iii.textures!j);)顯示bool display(float timcdclta)if( device )/攝像機控制參數/i f( :getasynckeystate(0x45) & 0x8000f )w -=0. ooolf;/ reset angle to zero when angle re

16、aches 2*p1辻(w <= 0. 08f )w = 0.08001f;)i f( :getasynckeystate(0x58) & oxsooof )w + 二0.0001 f;/ reset angle to zero when angle reaches 2*ptif( w >=0. 9999f )w = 0. 9998f;if( :getasynckeystale(vk left) & 0x8000f ) wcith -= 60. of * timcdclta;if( :getasynckeystate(vk_r1ght) & oxsooof

17、) weith += 60. of * timedelta;if( :getasynckeystate(vk.up) & 0x8000f ) height -= 100. of * timedelta;if( :getasynckeystate(vk down) & 0x8000f )攝像機設咼d3dxvect0r3 position( weith ,200, height+ 100. of );d3dxvect0r3 target (weith*0. of, 170. of, height+ 0. of);d3dxvect0r3 up (0. of, 1. of, 0. of

18、);d3dxmatrix v;d3dxmatrixlookatlii (&v, &position, &target, &up);device->settransform(d3dtsjrtew, &v);/ update: rotate the mesh./*/自動旋轉static float y = 0. of;d3dxmatrix yrot;d3dxmat r i xrot at i ony(&yrot, y);y += timedelta;if( y >= 6. 28f )y - 0. of;d3dxmatrix world =

19、 yrot:device->settransform(d3dts world, &world);*/ render/繪制圖形/dovicc->clcar(0, 0, d3dclear target | d3dclear_zbuffer, oxffffl'flx l.of, 0); device->beginscene();for(int i = 0; i < n; i+)for(int j = 0; j < objecti. mtrls. size(): j+)device->settrcinsform(d3dts_world, &(wherei i );device>setmaterial( &0bjecti. mtrlsj);device>settexture(0, objecti. texturesj);objecti. mesh->drawsubset(j);device>endscene ();devi ce>present (0, 0, 0, 0);re

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論