游戲設(shè)計(jì)文檔(場(chǎng)景管理)_第1頁(yè)
游戲設(shè)計(jì)文檔(場(chǎng)景管理)_第2頁(yè)
游戲設(shè)計(jì)文檔(場(chǎng)景管理)_第3頁(yè)
游戲設(shè)計(jì)文檔(場(chǎng)景管理)_第4頁(yè)
游戲設(shè)計(jì)文檔(場(chǎng)景管理)_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、城市獵人程序設(shè)計(jì)文檔組名:coders成員:李毓磊(20132085),賀俊雄(20132075),方文波(20132061),黃文(20132074),姚明輝(20132082)程序基本結(jié)構(gòu)說(shuō)明數(shù)據(jù)結(jié)構(gòu):自定義結(jié)構(gòu)體管理場(chǎng)景中的模型,定義字符數(shù)組和矩陣數(shù)組存儲(chǔ)各物體紋理文件路徑以及繪制位置。struct Obje /保存讀入的.X文件所需內(nèi)容ID3DXMesh* Mesh; /網(wǎng)格std:vector<D3DMATERIAL9> Mtrls; /材質(zhì)std:vector<IDirect3DTexture9*> Textures; /紋理坐標(biāo)ObjectN; /N個(gè)物體

2、D3DMATRIX WhereN; /存儲(chǔ)繪圖世界坐標(biāo)LPCSTR FilenameN="游戲界面.x","汽車.x","場(chǎng)景.x" /保存所有紋理文件路徑程序流程結(jié)構(gòu):初始化主顯示窗口:InitD3D繪制數(shù)據(jù)及參數(shù)設(shè)置Setup()顯示繪制的圖像Display()程序退出?釋放各類內(nèi)存程序模塊說(shuō)明變量定義模塊主要定義繪圖所需的數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)體,控制和繪圖所需的全局變量定義和初始化Setup()函數(shù)模塊主要完成的功能是完成繪制圖形的準(zhǔn)備工作,包括通過(guò)循環(huán)導(dǎo)入所有的.x文件,包括文件的材質(zhì),定點(diǎn)索引,材質(zhì)數(shù)。通過(guò)循環(huán)叫.x文件的信息全部

3、導(dǎo)入到程序中。另外如果遇到異常情況拋出異常并結(jié)束程序。并且在導(dǎo)入相應(yīng)的.x文件以后,為導(dǎo)入的.x文件都建立一個(gè)其在世界坐標(biāo)系的相應(yīng)位置并存儲(chǔ)到一個(gè)數(shù)組中。方便后續(xù)繪制函數(shù)Display()的調(diào)用。另外Setup()函數(shù)還負(fù)責(zé)設(shè)置紋理的過(guò)濾方式。以及設(shè)置燈光采用的照射方式,燈光的位置,反射的方式以及燈光的開(kāi)關(guān)。設(shè)置相機(jī)位置,相機(jī)角度。設(shè)置投影的方式投影角度等等都將在這個(gè)函數(shù)中實(shí)現(xiàn)。Cleanup()函數(shù)模塊主要完成的功能將前面分配的左右內(nèi)存進(jìn)行清理操作,即施放頂點(diǎn)緩存和索引緩存接口等。Display()函數(shù)模塊主要是完成場(chǎng)景的繪制以及場(chǎng)景的更新。我們想通過(guò)鍵盤控制攝像機(jī)的方向以及位置,必須在程序

4、中給攝像機(jī)的方向在每一幀圖像中給一定的旋轉(zhuǎn)角或位移才能實(shí)現(xiàn)攝像機(jī)的方向或者位置的改變。通過(guò)更新每一幀圖像中攝像機(jī)的位置及方向,實(shí)現(xiàn)視角的轉(zhuǎn)換。最后通過(guò)調(diào)用BeginScene()和EndScene(),在這兩個(gè)函數(shù)之間進(jìn)行場(chǎng)景的繪制。WndProc()模塊主要完成的是初始化主顯示窗口及Direct3D;調(diào)用Setup()函數(shù)對(duì)應(yīng)用程序進(jìn)行設(shè)置;EnterMsgLoop將Display()函數(shù)作為主循環(huán);執(zhí)行清除操作,釋放內(nèi)存,并釋放IDirect3DDevice9接口對(duì)象源程序代碼及說(shuō)明/#include "d3dUtility.h"#include <vector&

5、gt;IDirect3DDevice9* Device = 0; const int Width = 640;const int Height = 480;#define N 2 /所需讀入.x文件數(shù)量static float w=1.0f;struct Obje /保存讀入的.X文件所需內(nèi)容ID3DXMesh* Mesh; /網(wǎng)格std:vector<D3DMATERIAL9> Mtrls; /材質(zhì)std:vector<IDirect3DTexture9*> Textures; /紋理坐標(biāo) ObjectN;LPCSTR FilenameN="汽車.x&quo

6、t;,"場(chǎng)景.x" /保存所有紋理文件路徑D3DMATRIX Where10;/繪圖世界坐標(biāo)static float weith = 0.0f; /攝像頭控制static float height = 0.0f; / Framework functions/bool 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+) /循環(huán)讀入所有.x文件/獲取繪圖所需信息/ID3DXBuffer* adjBuffer =

7、 0; /鄰接表ID3DXBuffer* mtrlBuffer = 0; /存儲(chǔ)材質(zhì)參數(shù)DWORD numMtrls = 0; /材質(zhì)數(shù) hr = D3DXLoadMeshFromX( /讀.x文件Filenamei,D3DXMESH_MANAGED,Device,&adjBuffer,&mtrlBuffer,0,&numMtrls,&Objecti.Mesh);if(FAILED(hr) /是否讀入文件:MessageBox(0, "D3DXLoadMeshFromX() - FAILED", 0, 0);return false;if(

8、mtrlBuffer != 0 && numMtrls != 0 ) /是否有材質(zhì)D3DXMATERIAL* mtrls = (D3DXMATERIAL*)mtrlBuffer->GetBufferPointer();for(int j= 0; j < numMtrls; j+)/ the MatD3D property doesn't have an ambient value setmtrlsj.MatD3D.Ambient = mtrlsj.MatD3D.Diffuse;/ save the ith materialObjecti.Mtrls.push

9、_back( mtrlsj.MatD3D );/ check if the ith material has an associative textureif( mtrlsj.pTextureFilename != 0 ) /是否需要紋理/ yes, load the texture for the ith subsetIDirect3DTexture9* tex = 0;D3DXCreateTextureFromFile(Device,mtrlsj.pTextureFilename,&tex);/ save the loaded textureObjecti.Textures.pus

10、h_back( tex );else/ no texture for the ith subsetObjecti.Textures.push_back( 0 );d3d:Release<ID3DXBuffer*>(mtrlBuffer); / done w/ buffer/ Optimize the mesh./hr = Objecti.Mesh->OptimizeInplace( /優(yōu)化索引D3DXMESHOPT_ATTRSORT |D3DXMESHOPT_COMPACT |D3DXMESHOPT_VERTEXCACHE,(DWORD*)adjBuffer->GetB

11、ufferPointer(),0, 0, 0);d3d:Release<ID3DXBuffer*>(adjBuffer); / done w/ bufferif(FAILED(hr):MessageBox(0, "OptimizeInplace() - FAILED", 0, 0);return false;/循環(huán)讀入X結(jié)束/獲取繪圖世界坐標(biāo)/D3DXMATRIX size,trans1,trnas2,rotat1,rotat2,scal1,scal2;D3DXMatrixTranslation(&trans1,0,0,-100);size=trans1

12、;Where0=size;/車D3DXMatrixTranslation(&trans1,0,-100,100);D3DXMatrixScaling(&scal1,0.8,0.5,2.0);size=trans1*scal1;Where1=size; /場(chǎng)景/獲取坐標(biāo)結(jié)束/ Set texture filters./Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);Dev

13、ice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);/ / Set Lights./設(shè)置燈光/D3DXVECTOR3 dir(1.0f, 0.0f, -1.0f);D3DXCOLOR col(1.0f, 1.0f, 1.0f, 1.0f);D3DLIGHT9 light = d3d:InitDirectionalLight(&dir, &col);Device->SetLight(0, &light);Device->LightEnable(0, true);Device->SetR

14、enderState(D3DRS_NORMALIZENORMALS, true);Device->SetRenderState(D3DRS_SPECULARENABLE, true);/ Set projection matrix./設(shè)置投影參數(shù)/D3DXMATRIX proj;D3DXMatrixPerspectiveFovLH(&proj,D3DX_PI * 0.5f, / 90 - degree(float)Width / (float)Height,1.0f,1500.0f);Device->SetTransform(D3DTS_PROJECTION, &p

15、roj);return true;/清除緩存void Cleanup()for(int i = 0; i < N; i+)d3d:Release<ID3DXMesh*>(Objecti.Mesh);for(int j = 0; j < Objecti.Textures.size(); j+)d3d:Release<IDirect3DTexture9*>( Objecti.Texturesj );/顯示bool Display(float timeDelta)if( Device )/攝像機(jī)控制參數(shù)/ if( :GetAsyncKeyState(0x45) &

16、amp; 0x8000f )w -=0.0001f;/ reset angle to zero when angle reaches 2*PIif( w <= 0.08f )w = 0.08001f;if( :GetAsyncKeyState(0x58) & 0x8000f )w +=0.0001f;/ reset angle to zero when angle reaches 2*PIif( w >=0.9999f )w = 0.9998f;if( :GetAsyncKeyState(VK_LEFT) & 0x8000f )weith -= 60.0f * ti

17、meDelta;if( :GetAsyncKeyState(VK_RIGHT) & 0x8000f )weith += 60.0f * timeDelta;if( :GetAsyncKeyState(VK_UP) & 0x8000f )height -= 100.0f * timeDelta;if( :GetAsyncKeyState(VK_DOWN) & 0x8000f )height += 100.0f * timeDelta;/攝像機(jī)設(shè)置D3DXVECTOR3 position( weith ,200, height+ 100.0f );D3DXVECTOR3 t

18、arget(weith+0.0f,170.0f,height+ 0.0f);D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);D3DXMATRIX V;D3DXMatrixLookAtLH(&V, &position, &target, &up);Device->SetTransform(D3DTS_VIEW, &V);/ Update: Rotate the mesh./* /自動(dòng)旋轉(zhuǎn)static float y = 0.0f;D3DXMATRIX yRot;D3DXMatrixRotationY(&yRot, y);y

19、+= timeDelta;if( y >= 6.28f )y = 0.0f;D3DXMATRIX World = yRot;Device->SetTransform(D3DTS_WORLD, &World);*/ Render/繪制圖形/Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xffffffff, 1.0f, 0);Device->BeginScene(); for(int i = 0; i < N; i+)for(int j = 0; j < Objecti. Mtrls.size(); j+) Device->SetTransform(D3DTS_WORLD,&(Wherei) );Device->SetMaterial( &Objecti.Mtrlsj );Device->SetTexture(0, Objecti.Texturesj);Objecti.Mesh->DrawSubset(j);Device->EndScene();Device->Present(0

溫馨提示

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

評(píng)論

0/150

提交評(píng)論