《游戲設(shè)計》課程設(shè)計指導書_第1頁
《游戲設(shè)計》課程設(shè)計指導書_第2頁
《游戲設(shè)計》課程設(shè)計指導書_第3頁
《游戲設(shè)計》課程設(shè)計指導書_第4頁
《游戲設(shè)計》課程設(shè)計指導書_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、游戲設(shè)計課程設(shè)計指導書編寫:藺廣逢適用于:數(shù)字媒體專業(yè)2011.12游戲設(shè)計課程設(shè)計任務(wù)書設(shè)計時間:1周 學 分 數(shù):1.0執(zhí)筆人:范彩霞 編寫日期:2008年10月一、課程設(shè)計目的游戲設(shè)計課程設(shè)計是數(shù)字媒體技術(shù)專業(yè)必修的實踐環(huán)節(jié)。本課程設(shè)計是游戲設(shè)計課程實踐環(huán)節(jié)的深化和延續(xù)。通過該實踐環(huán)節(jié)的訓練,使學生能夠更加全面和系統(tǒng)的掌握游戲設(shè)計的體系結(jié)構(gòu)。通過對所做游戲的故事梗概、游戲類型以及設(shè)計制作過程中所涉及的相關(guān)技術(shù)的學習和掌握,提高學生的實踐能力以及團隊協(xié)作能力,為在計算機游戲設(shè)計這一領(lǐng)域進行深入研究做準備。二、課程設(shè)計的內(nèi)容與要求本課程設(shè)計通過分組來進行,每組34人。對每一個組,都必須設(shè)計和

2、實現(xiàn)一個完整的游戲,游戲的類型不限,軟件運行環(huán)境限為Microsoft Windows,硬件平臺限為PC。在每組進行游戲設(shè)計之前必須提供游戲文檔說明,包括游戲的故事情節(jié)、游戲的類型、游戲界面的設(shè)計等。每組設(shè)計的游戲不一定是原創(chuàng)的,但絕不能抄襲已有的游戲。每組設(shè)計的游戲需要有較為完整的情節(jié),要求能體現(xiàn)以下的基本技術(shù):提供使用鍵盤或鼠標控制視點的朝向和運動的功能;在游戲中至少有一個人物是三維的,并且能產(chǎn)生相應(yīng)的動畫。必須在某個場景中有配音或者背景音樂;最好能在某一個畫面中體現(xiàn)一些特效技術(shù);必須能實時或者準實時運行。游戲設(shè)計完成后對自己所做的游戲進行短評,包括:游戲中的哪一部分是最得意的?對最初的游

3、戲設(shè)計作了哪些修改,為什么?在這個游戲項目的實踐中獲得的經(jīng)驗和教訓是什么?如果有更多的時間下一步會怎么做?三、課程設(shè)計的報告(論文、作業(yè))的要求 課程設(shè)計報告是課程設(shè)計過程的整理和總結(jié)。因此,編寫課程設(shè)計報告是課程設(shè)計階段的一個重要組成部分。課程設(shè)計報告的內(nèi)容和要求根據(jù)設(shè)計內(nèi)容而定,對于本課程設(shè)計,主要應(yīng)包括以下內(nèi)容:封面:封面上應(yīng)標明“游戲設(shè)計課程設(shè)計”報告、專業(yè)、姓名、學號與時間等;課程設(shè)計報告內(nèi)容主要包括:(1)課程設(shè)計的目的;(2)課程設(shè)計的內(nèi)容:主要包括:游戲的故事摘要 ;游戲的類型;各成員的分工;制作工具;流程圖以及如何玩這個游戲。重點寫明設(shè)計思想,制作步驟、制作過程中出現(xiàn)的問題、

4、解決方案等;(3)總結(jié):總結(jié)成功之處與問題所在,自己通過本次課程設(shè)計有什么收獲和感悟。四、課程設(shè)計考核與成績評定根據(jù)學生的實驗準備、操作能力、實驗結(jié)果、實驗報告質(zhì)量、實驗紀律等綜合評定實驗成績。(1)總分100分:其中考勤10分,作品50分,課程設(shè)計報告40分;(2)考勤每天上、下午1次,每次2分;(3)如發(fā)現(xiàn)有嚴重抄襲者,個人成績以零分計;(4)課程設(shè)計報告以準確、規(guī)范、認真等指標進行打分,不得抄襲,否則總成績按零分計。五、課程設(shè)計紀律及注意事項(1)每位參加課程設(shè)計的同學必須認真對待,積極參加;(2)從嚴要求自己,不隨意遲到、早退和曠課,有事需例行請假手續(xù),實驗室內(nèi)不得玩計算機游戲;(3)

5、在課程設(shè)計中應(yīng)積極發(fā)揮個人主觀能動性,勤于思考,虛心向指導教師、實驗室教師請教,服從實驗室教師的安排;(4)愛護實驗室的所有財產(chǎn),不得私自刪除機器上系統(tǒng)文件;(5)保持實驗室的整潔衛(wèi)生。凡違反課程設(shè)計紀律者,指導教師或?qū)嶒炇医處熡袡?quán)進行批評教育或終止其課程設(shè)計,成績以零分記。DirectX初級教程1. 開發(fā)環(huán)境32. 3D基本概念32.1 幾種顏色的變量類型及其相關(guān)函數(shù)應(yīng)注意區(qū)分:32.2 材質(zhì)42.3 向量42.4 光源42.5 攝像機(camera)43. 創(chuàng)建D3D設(shè)備53.1 Direct3DCreate9 ( )53.2 CreateDevice ( )53.3 基本變量53.4 其

6、他要調(diào)用的函數(shù)及變量(調(diào)用次數(shù)較少)54. 基本渲染頂點64.1  定義頂點格式和;64.2 創(chuàng)建頂點緩沖區(qū)并填充之;64.3D3D進行渲染;75. 使用頂點索引緩沖區(qū)85.1 創(chuàng)建頂點索引緩沖區(qū)并填充之85.2 將頂點索引緩沖區(qū)設(shè)置到渲染管道流水線96. 攝像機106.1 D3D中使用的幾種常用的向量106.2D3D相機中使用的幾種常用的關(guān)于向量的函數(shù)106.3點和向量的區(qū)別116.3 Camera相機矩陣計算問題117.基本紋理應(yīng)用127.1 紋理尺寸127.2 紋理坐標127.3 基本紋理添加步驟以及所使用的函數(shù)128.模型加載141.裝載模型142.填充紋理和材質(zhì)143.渲染

7、141. 開發(fā)環(huán)境注意,一定要把新加的SDK路徑移動到目錄列表的最上方,因為VC是按順序搜索路徑的。最基本的DX定義規(guī)范:I開頭的是接口;D3D開頭的一般是定義的一些結(jié)構(gòu);D3DX是封裝了操作的擴展結(jié)構(gòu);2. 3D基本概念2.1 幾種顏色的變量類型及其相關(guān)函數(shù)應(yīng)注意區(qū)分:D3DCOLOR、D3DXCOLOR、D3DCOLORVALUE。注意:1. D3DCOLOR屬于DWORD型的變量,其定義包含在d3d9types.h文件中;2. D3DXCOLOR屬于結(jié)構(gòu)體類型,其定義包含在d3dx9math.h中:typedef struct D3DXCOLOR  FLOAT r;

8、FLOAT g; FLOAT b; FLOAT a; D3DXCOLOR; / r, g, b, a的范圍在0.0f-255.0f之間3. D3DCOLORVALUE同屬于結(jié)構(gòu)體類型,其定義包含在d3d9types.h文件中:typedef struct _D3DCOLORVALUE  float r; float g; float b; float a; D3DCOLORVALUE; / r, g, b, a的范圍在0.0f-1.0f之間與各個變量相對應(yīng)的函數(shù)或宏也包含在與變量相對應(yīng)的頭文件中(帶有x的變量其對應(yīng)

9、頭文件也包含x,方便記憶)。下邊介紹相關(guān)函數(shù)及宏。1. 與D3DCOLOR相對應(yīng)的宏有以下4個:1. #define D3DCOLOR_ARGB(a , r, g, b) (D3DCOLOR)(a)&0xff)<<24)|(r)&0xff)<<16)|(g)&0xff)<<8)|(b)&0xff)2. #define D3DCOLOR_RGBA(r, g, b, a) D3DCOLOR_ARGB(a,r,g,b)3. #define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b)

10、其中該宏的Alpha值定義為255,完全不透明。4. #define D3DCOLOR_COLORVALUE(r,g,b,a) D3DCOLOR_RGBA(DWORD)(r)*255.f),(DWORD)(g)*255.f),(DWORD)(b)*255.f), (DWORD)(a)*255.f)前三個宏的r,g,b,a值均為整型數(shù),最后一個必須是從0.0到1.0的浮點型數(shù)。2.2 材質(zhì)材質(zhì)的定義是:材質(zhì)typedef struct _D3DMATERIAL9 D3DCOLORVALUE Diffuse; / 漫反射光D3DCOLORVALUE Ambient; / 環(huán)境光,理解為整

11、體亮度D3DCOLORVALUE Specular; / 鏡面反射,一般用于光滑的平面D3DCOLORVALUE Emissive; / 放射光,一般用于自發(fā)光體(太陽、燈) 對于材質(zhì)設(shè)置,自發(fā)光不應(yīng)太強。float Power; / 指定鏡面高光的強度 D3DMATERIAL9;2.3 向量typedef struct _D3DVECTOR   float  x, y, z; D3DVECTOR; 該定義包含在d3d9types.h頭文件中。2.4 光源typedef struct _D3DLIGHT9  D3DLIGHTTYPE Type; / 光源

12、類型,有點光源、聚焦光源、方向光源3種 D3DCOLORVALUE Diffuse; / 漫反射光顏色D3DCOLORVALUE Specular; / 鏡面反射光顏色D3DCOLORVALUE Ambient; / 環(huán)境光顏色D3DVECTOR Position; / 光源位置(對方向光源無效,如果創(chuàng)建方向光源可忽略)D3DVECTOR Direction; / 方向(對點光源無效,如果創(chuàng)建點光源無效可忽略??梢允欠菃挝幌蛄?,但是不能是0向量)float Range; / 光的范圍,就是能照多遠(對方向光無效,如果創(chuàng)建方向光源可忽略)float Falloff; / 聚光內(nèi)外光圈的

13、徑向強度衰減,一般為1.0f (只針對聚焦光源)float Attenuation0; / 距離衰減0(創(chuàng)建方向光源可忽略,非方向光源一般3個距離衰減均取取0.0f)float Attenuation1; / 距離衰減1(創(chuàng)建方向光源可忽略,非方向光源一般3個距離衰減均取取0.0f)float Attenuation2; / 距離衰減2(創(chuàng)建方向光源可忽略,非方向光源一般3個距離衰減均取取0.0f)float Theta; / 指定聚光內(nèi)圈的夾角大小(0-Phi)(只針對聚焦光源) float Phi; / 指定聚光外圈的夾角大?。?-pi)(只針對聚焦光源) D3DLIGHT9;注:1. 這

14、里非方向光源指 點光源 和 聚焦光源。2. 添加光照并開啟光照,而且必須為模型或面添加了法向量及材質(zhì),光源才起作用。 即光照三要素:光照、材質(zhì)、法向量。2.5 攝像機(camera)攝像機的確定有兩個主要參數(shù):一個位置和一個方向。將攝像機設(shè)置到場景中要用到SetTransform( D3DTS_VIEW, &m_matView ); / m_matView就是攝象機的觀察矩陣。3. 創(chuàng)建D3D設(shè)備所需的主要的2個函數(shù)和3個變量(其余函數(shù)根據(jù)所需變量的填充要求而定)3.1 Direct3DCreate9 ( )其原型為IDirect3D9  * Direct3DCreate9

15、(   UINT SDKVersion ); SDKVersion為SDK版本值,函數(shù)及SDKVersion的定義包含在d3d9.h中,編譯過程中需要d3d9.lib鏈接庫。3.2 CreateDevice ( )HRESULT  CreateDevice ( UINT Adapter,      D3DDEVTYPE DeviceType, HWND hFocusWindow,      DWORD BehaviorFlag

16、s,      D3DPRESENT_PARAMETERS *pPresentationParameters,     IDirect3DDevice9* ppReturnedDeviceInterface );參數(shù)解釋:UINT Adapter 一般使用D3DADAPTER_DEFAULT代表主適配器(即顯示器);D3DDEVTYPE DeviceTypeD3DDEVTYPE_HAL代表使用硬件加速方式,D3DDEVTYPE_REF代表使用軟件仿真方式;HWND 

17、hFocusWindow代表要創(chuàng)建D3D設(shè)備的窗口的句柄    DWORD BehaviorFlags處理標識:最常用的選項有 D3DCREATE_HARDWARE_VERTEXPROCESSING硬件處理 D3DCREATE_SOFTWARE_VERTEXPROCESSING軟件處理D3DCREATE_MIXED_VERTEXPROCESSING軟硬件結(jié)合處理D3DPRESENT_PARAMETERS *pPresentationParameters描述設(shè)備顯示參數(shù)的結(jié)構(gòu)體,一般要調(diào)用其他函數(shù)來填充該結(jié)構(gòu)體;IDirect3DDev

18、ice9* ppReturnedDeviceInterface用于返回D3D的設(shè)備對象指針。3.3 基本變量 D3DCAPS9、D3DDISPLAYMODE、D3DPRESENT_PARAMETERS三個比較基本的變量,用于描述顯示設(shè)備創(chuàng)建時的相關(guān)參數(shù)。3.4 其他要調(diào)用的函數(shù)及變量(調(diào)用次數(shù)較少) HRESULT  GetDeviceCaps(   UINT Adapter,     D3DDEVTYPE DeviceType,     D3DCAPS9

19、 *pCaps); HRESULT  GetAdapterDisplayMode(  UINT Adapter,     D3DDISPLAYMODE *pMode);UINT  GetAdapterCount( VOID );4. 基本渲染頂點渲染的基本步驟是這樣的:4.1  定義頂點格式和; 頂點格式必須與FVF中定義的一致,這樣流水線才能識別。如:struct CUSTOMVERTEX  FLOAT x, y, z; / 頂點坐標 DWORD color; /

20、 頂點顏色;與之相對應(yīng)的FVF為藍色部分。#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)4.2 創(chuàng)建頂點緩沖區(qū)并填充之; 使用的基本函數(shù)有:1. CreateVertexBuffer(); HRESULT CreateVertexBuffer(   UINT Length,     DWORD Usage,     DWORD FVF,    

21、 D3DPOOL Pool,     IDirect3DVertexBuffer9* ppVertexBuffer,     HANDLE* pHandle);UINT Length用來指定頂點緩沖區(qū)的大?。籇WORD Usage一般設(shè)置為0;DWORD FVF自定義可變頂點格式;D3DPOOL Pool可用D3DPOOL _DEFAULT = 0 (一般用這個比較多),D3DPOOL_MANAGED = 1, &#

22、160;   D3DPOOL_SYSTEMMEM = 2,     D3DPOOL_SCRATCH = 3,IDirect3DVertexBuffer9* ppVertexBuffer指向頂點緩沖區(qū)COM對象的指針。HANDLE* pHandle 一般設(shè)置為NULL。2. Lock() HRESULT Lock( UINT OffsetToLock,     UINT SizeToLock,    

23、; VOID *ppbData,     DWORD Flags);UINT OffsetToLock,鎖定區(qū)域偏移量,一般為0;     UINT SizeToLock, 要鎖定區(qū)域的大?。?#160;    VOID *ppbData, 返回指向緩沖區(qū)數(shù)據(jù)的指針;     DWORD Flags 鎖定行為標識符,一般設(shè)置為0;3. memcpy( )(用此函數(shù)將計算好的數(shù)據(jù)拷貝進緩沖

24、區(qū)),如memcpy(in,out,sizeof(buffer);4. HRESULT Unlock(VOID); 解除對數(shù)據(jù)區(qū)的鎖定,一邊流水線渲染可以正常執(zhí)行。4.3 D3D進行渲染;有兩個基本函數(shù):1. SetStreamSource()用于將頂緩沖區(qū)設(shè)置到流水線中; HRESULT SetStreamSource(    UINT StreamNumber,     IDirect3DVertexBuffer9 *pStreamData,  

25、60;  UINT OffsetInBytes,     UINT Stride ); UINT StreamNumber 一般設(shè)置為0;IDirect3DVertexBuffer9 *pStreamData 指向頂點緩沖區(qū)COM對象的指針;     UINT OffsetInBytes 指針偏移量不偏移則取0;     UINT Stride 頂點跨距,即每個頂點所占的字節(jié)數(shù)2. SetFVF()用于將頂

26、點自定義格式傳遞給流水線。注:IDirect3DDevice9:SetFVF(Vertex:FVF) FVF保存著頂點描述,F(xiàn)VF的定義形式如下: #define FVF (D3DFVF_XYZ|D3DFVF_DIFFUSE)或  DWORD const dwFVF = ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE ); D3DFVF_XYZ:表示頂點格式中包含頂點坐標信息。它告知系統(tǒng)你的游戲沒有變換過頂點,要求Direct3D來做頂點的變換工作。 D3DFVF_XYZRHW:告知系統(tǒng)你的游戲引擎已對頂點作過

27、變換,Direct3D不需要再對它們作變換。也就是說,Direct3D就不會再用世界矩陣、觀察矩陣或投射矩陣來變換頂點了。 D3DFVF_DIFFUSE:表示頂點格式中包含了一個漫反射顏色信息。 D3DFVF_SPECULAR:表示頂點格式中包含一個鏡面反射顏色成分。 D3DFVF_NORMAL:表示頂點格式中包含有頂點朝向信息(即法線向量)。 D3DFVF_TEX0 D3DFVF_TEX8:包含頂點格式坐標的個數(shù)(1-8個)。 例如: typedef struct SObjVertex FLOAT x, y, z; / position FLOAT nx, ny, nz; / normal

28、DWORD diffuse; / diffuse color DWORD specular; / specular color FLOAT tu, tv; / first pair of texture coordinates FLOAT tu2, tv2, tw2; / second pair of texture coordinates FLOAT tu3, tv3; / third pair of texture coordinates FLOAT tu4, tv4; / fourth pair of texture coordinates SObjVertex; const DWORD

29、 gSObjVertexFVF = (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_NORMAL | D3DFVF_TEX4 | D3DFVF_TEXCOORDSIZE2(0) | D3DFVF_TEXCOORDSIZE3(1) | D3DFVF_TEXCOORDSIZE2(2) | D3DFVF_TEXCOORDSIZE2(3);   IDirect3DDevice9:DrawPrimitive: HRESULT DrawPrimitive( D3DPRIMITIVETYPE PrimitiveType, UINT S

30、tartVertex, UINT PrimitiveCount ); PrimitiveType:定義了要使用的圖元的類型。共有六種: typedef enum D3DPRIMITIVETYPE D3DPT_POINTLIST = 1, /點,圖元個數(shù)N D3DPT_LINELIST = 2,/線,圖元個數(shù)為N/2 D3DPT_LINESTRIP = 3,/ D3DPT_TRIANGLELIST = 4, D3DPT_TRIANGLESTRIP = 5, D3DPT_TRIANGLEFAN = 6, D3DPT_FORCE_DWORD = 0x7fffffff, D3DPRIMITIVETYP

31、E, *LPD3DPRIMITIVETYPE; StarVertex:設(shè)置從頂點緩沖區(qū)中的第幾個頂點畫起。 PrimitiveCount:要繪畫的圖元的數(shù)量。 3. DrawPrimitive() HRESULT DrawPrimitive(   D3DPRIMITIVETYPE PrimitiveType, 圖元類型     UINT StartVertex, 起始頂點     UINT PrimitiveCount 要繪制的圖元個數(shù));完成上

32、述過程就可以對定點進行渲染了。渲染函數(shù)DrawPrimitive()不對頂點的格式進行再次檢查:比如同一個緩沖區(qū)可以,你本來打算是用來畫三角形列表,但也可以畫直線,或者三角形帶、扇形等,函數(shù)不會再次檢查。5. 使用頂點索引緩沖區(qū)在一個3D模型中一個點可能要同時處于多個三角形面上,如果直接把頂點數(shù)據(jù)放進緩沖區(qū),那么重復的頂點就會占用多余的內(nèi)存。使用頂點緩沖區(qū)把頂點的具體數(shù)據(jù)和代表三角形的頂點的索引分開存儲,頂點數(shù)據(jù)還是放到頂點緩沖區(qū)中,頂點索引存儲在頂點索引緩沖區(qū)中,這樣可以節(jié)省不少內(nèi)存,避免點的重復存儲。5.1 創(chuàng)建頂點索引緩沖區(qū)并填充之使用到的函數(shù):1. HRESULT Creat

33、eIndexBuffer(    UINT Length,    DWORD Usage,      D3DFORMAT Format,     D3DPOOL Pool,     IDirect3DIndexBuffer9* ppIndexBuffer,      HANDLE* pHandle ); 用于創(chuàng)建頂點索

34、引緩沖區(qū)UINT Length 頂點索引緩沖區(qū)的大小,有多少個索引,就有多少個頂點的字節(jié)大??;    DWORD Usage 可以置為0;    D3DFORMAT Format D3DFMT_INDEX16,D3DFMT_INDEX32分別表示用16位(可存儲65536個頂點),32位存(可存儲65536*65536個頂點)儲索引值。     D3DPOOL Pool 可取D3DPOOL_DEFAULT;    

35、IDirect3DIndexBuffer9* ppIndexBuffer 頂點索引緩沖區(qū)的COM對象指針;    HANDLE* pHandle 一般值為NULL; 2. HRESULT  Lock(   UINT OffsetToLock,     UINT SizeToLock,     VOID *ppbData,     DWORD Fla

36、gs ); 用于鎖定頂點索引緩沖區(qū)并返回索引數(shù)據(jù)區(qū)指針; UINT OffsetToLock 鎖定偏移量,一般設(shè)置為0;     UINT SizeToLock 頂點索引緩沖區(qū)的字節(jié)數(shù),等于頂點索引個數(shù) * 索引位深 / 8;     VOID *ppbData 返回指向頂點索引緩沖數(shù)據(jù)區(qū)的指針,以便數(shù)據(jù)復制;     DWORD Flags 一般設(shè)置為0;3. HRESULT  Unlock (VOID);用于解除頂點索引緩

37、沖區(qū)區(qū)注意:一般手動填充頂點索引緩沖區(qū),因為那幾個頂點構(gòu)成一個三角形有自己來確定;5.2 將頂點索引緩沖區(qū)設(shè)置到渲染管道流水線1. HRESULT  SetIndices( IDirect3DIndexBuffer9  * pIndexData );其中的pIndexData為指向頂點索引緩沖區(qū)COM對象的指針; 2. HRESULT DrawIndexedPrimitive(   D3DPRIMITIVETYPE Type,     INT BaseVertexI

38、ndex,     UINT MinIndex,     UINT NumVertices,     UINT StartIndex,     UINT PrimitiveCount );  D3DPRIMITIVETYPE Type, 圖元類型;     INT BaseVertexIndex, 初始頂點的索引值的偏移量,一般

39、為0;    UINT MinIndex, 最小頂點索引值,一般為0;     UINT NumVertices, 頂點緩沖區(qū)中的頂點數(shù)量;     UINT StartIndex, 起始的頂點索引,一般為0;     UINT PrimitiveCount 需要渲染的圖元的個數(shù);頂點索引緩沖區(qū)中的頂點順序很重要,因為默認情況下,流水線只繪制點排列順序為逆時針的三角形,而不繪制排列順序為順時針的三角形(可以

40、設(shè)置為NOCULL模式這樣渲染管線不裁剪)。包含D3DFVF_XYZRHW的點可以直接繪制在屏幕上,而不需要變換。這是因為生成一個包含D3DFVF_XYZRHW屬性的VertexBuffer對象,渲染流水線會認為改點已經(jīng)進行了頂點變換,不要再將頂點數(shù)據(jù)作變換(不乘世界矩陣,視矩陣,投影矩陣)。這是繪圖時用的坐標系可以理解為簡單的屏幕坐標系(即x正方向水平向左,y正方向豎直向下)英文:The RHW float, when set to one, indicates that the vertice are not to be transformed. This is used for GUI

41、developement. setting the RHW tells the direct3d pipeline NOT to apply any transformations matrices to them and you can think of them as pure 2d coords instead of 3d coords.6. 攝像機6.1 D3D中使用的幾種常用的向量常用的有以下幾種:1. D3DVECTOR定義在d3d9types.h頭文件中,其為結(jié)構(gòu)體,定義如下: typedef struct _D3DVECTOR  float x, y, z;

42、 D3DVECTOR; D3DVECTOR屬于3維向量。2. D3DXVECTOR2定義如下: typedef struct D3DXVECTOR2  FLOAT x; FLOAT y; D3DXVECTOR2; D3DXVECTOR2屬于2維向量。D3DXVECTOR3定義如下:typedef struct FLOAT x; FLOAT y; FLOAT z; D3DXVECTOR3; D3DXVECTOR3屬于3維向量。D3DXVECTOR4定義如下:typedef struct D3DXVECTOR4  FLOAT&#

43、160;x; FLOAT y; FLOAT z; FLOAT w; D3DXVECTOR4; D3DXVECTOR4屬于4維向量。以上三者均在d3dxmath.h中定義(記憶方法同D3DCOLOR、D3DXCOLOR)。6.2 D3D相機中使用的幾種常用的關(guān)于向量的函數(shù)1. D3DXVec3Dot ();2. D3DXVec3Normalize ();3. D3DXVec3Cross ();4. D3DXMatrixRotationAxis ();5. D3DXVec3TransformCoord ();介紹:1. FLOAT  D3DXVec3Dot

44、(  CONST D3DXVECTOR3 *pV1,CONST D3DXVECTOR3 *pV2 ); 該函數(shù)用于計算兩個三維向量的點乘,并返回最終結(jié)果。2. D3DXVECTOR3 * WINAPI  D3DXVec3Normalize(  D3DXVECTOR3 *pOut,     CONST D3DXVECTOR3 *pV );該函數(shù)用于計算第二個向量的單位向量(即歸一化向量),第二個參數(shù)為source即傳入向量,并將計算結(jié)果存放于第一個參數(shù)中或返

45、回。 3. D3DXVECTOR3 * D3DXVec3Cross(  D3DXVECTOR3 * pOut,     CONST D3DXVECTOR3 * pV1,     CONST D3DXVECTOR3 * pV2 ); 該函數(shù)用于計算后兩個向量的叉乘,并將結(jié)果放于第一個參數(shù)中或返回。4. D3DXMATRIX * D3DXMatrixRotationAxis ( D3DXMATRIX * pOut,  &

46、#160;  CONST D3DXVECTOR3 * pV,     FLOAT  Angle );D3DXMATRIX * pOut根據(jù)旋轉(zhuǎn)角度和轉(zhuǎn)軸計算出來的繞pV軸旋轉(zhuǎn)Angle弧度應(yīng)使用的旋轉(zhuǎn)矩陣。     CONST D3DXVECTOR3 * pV用于定義旋轉(zhuǎn)軸的向量。     FLOAT  Angle 旋轉(zhuǎn)過的弧度,因為實在左手坐標系中,所以順時針轉(zhuǎn)動為正。Angles are measured clo

47、ckwise when looking along the rotation axis toward the origin5. 下面來看看D3DXVec3TransformCoord()函數(shù):D3DXVECTOR3  * D3DXVec3TransformCoord(  D3DXVECTOR3 * pOut,     CONST D3DXVECTOR3 * pV,     CONST D3DXMATRIX * pM );計算點pV經(jīng)過矩陣pM旋轉(zhuǎn)后的值,并將值放于p

48、Out中或返回。6.3 點和向量的區(qū)別坐標和向量是有區(qū)別的:向量的第四維數(shù)值是0,坐標的第四維數(shù)值是1;向量 = 兩個坐標的差值 ,第四維同樣做減法,結(jié)果是0;向量的坐標變換用D3DXVec3TransformNormal, 點的變換用D3DXVec3TransformCoord。D3DXVec3Transform和D3DXVec3TransformCoord相似,區(qū)別在于后者變換后將w投射回1。6.3 Camera相機矩陣計算問題參見函數(shù)D3DXMatrixLookatLH()其最終計算出來的相機矩陣各個參數(shù)如下:D3DXMATRIX  * WINAPI  D3

49、DXMatrixLookAtLH(  D3DXMATRIX *pOut,     CONST D3DXVECTOR3 *pEye,     CONST D3DXVECTOR3 *pAt,     CONST D3DXVECTOR3 *pUp );RemarksThe return value for this function is the same value returned in the pOut parame

50、ter. In this way, the D3DXMatrixLookAtLH function can be used as a parameter for another function.This function uses the following formula(表達式) to compute the returned matrix.cam_pos = eye.cam_lookat = zaxis = normal(At - Eye) (在RH中為normal(Eye-At))cam_right = xaxis = normal(cross(Up, zaxis)cam_up =

51、cross(zaxis, xaxis) xaxis.x yaxis.x zaxis.x 0 xaxis.y yaxis.y zaxis.y 0 xaxis.z yaxis.z zaxis.z 0-dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) 17.基本紋理應(yīng)用7.1 紋理尺寸紋理都是2D的圖片,它可以保存為bmp、tga、jpg或是任何一種常見的圖片格式,所以它肯定有大小。雖然理論上現(xiàn)在的新型顯卡可以支持任意尺寸的紋理,不過為了兼容以前的顯卡也為了程序的執(zhí)行效率,你最好把紋理的尺寸做成的n次方。如:16 x 16, 32 x 32, 64

52、x 64, 128 x 128, 256 x 256等等。7.2 紋理坐標紋理坐標又叫貼圖坐標,在D3D中用兩個0到1的浮點值(U,V)來設(shè)置一個點的紋理坐標,U是橫軸、是縱軸。紋理的左上角為(0,0),右下角為(1,1)。7.3 基本紋理添加步驟以及所使用的函數(shù)1. 為頂點添加紋理坐標u、v并修改頂點的FVF2. 定義紋理對象指針并創(chuàng)建紋理對象。 如: LPDIRECT3DTEXTURE9 ppTexture; / 定義紋理對象指針 HRESULT  D3DXCreateTextureFromFile(  LPDIRECT3DDEVICE9  pDev

53、ice,      LPCTSTR pSrcFile,       LPDIRECT3DTEXTURE9  * ppTexture ); LPDIRECT3DDEVICE9  pDevice, / 設(shè)備對象     LPCTSTR pSrcFile, / 待作為紋理的圖像名稱LPDIRECT3DTEXTURE9  * ppTexture ); / 紋理對象指針3. 將紋理設(shè)置到渲染管線并渲染1. HRESULT SetText

54、ure( DWORD Sampler, /將一張紋理指派給設(shè)備中的某個特定的階段 IDirect3DBaseTexture9 * pTexture) /紋理對象指針 SetTexture()方法將一張紋理指派給設(shè)備中的某個特定的階段。Direct3D提供了8個階段(0到7),這意味著可以為一次DrawPrimitive()調(diào)用同時設(shè)置最多8張紋理。(然而,你也可以多次調(diào)用DrawPrimitive(),這稱“多次渲染”)。SetTexture()的第一個參數(shù)中給出一個希望使用的紋理階段編號。第二個參數(shù)為紋理對象指針。當一個應(yīng)用程序選擇了一張紋理作為當前紋理時,它就指示Direct3D設(shè)備在下一次改變當前紋理之前,一直將該紋理應(yīng)用到所有被渲染的圖元上去。如果3D場景中的每個圖元都有其自己的紋理,則必需在繪制每個圖元之前設(shè)置相應(yīng)的紋理,也就是說應(yīng)在調(diào)用DrawPrimitive()函數(shù)之前進行紋理設(shè)置。 2. HRESULT SetTextureStageState( D

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論