




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、游戲設計課程設計指導書編寫:藺廣逢適用于:數字媒體專業(yè)2011.12游戲設計課程設計任務書設計時間:1周 學 分 數:1.0執(zhí)筆人:范彩霞 編寫日期:2008年10月一、課程設計目的游戲設計課程設計是數字媒體技術專業(yè)必修的實踐環(huán)節(jié)。本課程設計是游戲設計課程實踐環(huán)節(jié)的深化和延續(xù)。通過該實踐環(huán)節(jié)的訓練,使學生能夠更加全面和系統的掌握游戲設計的體系結構。通過對所做游戲的故事梗概、游戲類型以及設計制作過程中所涉及的相關技術的學習和掌握,提高學生的實踐能力以及團隊協作能力,為在計算機游戲設計這一領域進行深入研究做準備。二、課程設計的內容與要求本課程設計通過分組來進行,每組34人。對每一個組,都必須設計和
2、實現一個完整的游戲,游戲的類型不限,軟件運行環(huán)境限為Microsoft Windows,硬件平臺限為PC。在每組進行游戲設計之前必須提供游戲文檔說明,包括游戲的故事情節(jié)、游戲的類型、游戲界面的設計等。每組設計的游戲不一定是原創(chuàng)的,但絕不能抄襲已有的游戲。每組設計的游戲需要有較為完整的情節(jié),要求能體現以下的基本技術:提供使用鍵盤或鼠標控制視點的朝向和運動的功能;在游戲中至少有一個人物是三維的,并且能產生相應的動畫。必須在某個場景中有配音或者背景音樂;最好能在某一個畫面中體現一些特效技術;必須能實時或者準實時運行。游戲設計完成后對自己所做的游戲進行短評,包括:游戲中的哪一部分是最得意的?對最初的游
3、戲設計作了哪些修改,為什么?在這個游戲項目的實踐中獲得的經驗和教訓是什么?如果有更多的時間下一步會怎么做?三、課程設計的報告(論文、作業(yè))的要求 課程設計報告是課程設計過程的整理和總結。因此,編寫課程設計報告是課程設計階段的一個重要組成部分。課程設計報告的內容和要求根據設計內容而定,對于本課程設計,主要應包括以下內容:封面:封面上應標明“游戲設計課程設計”報告、專業(yè)、姓名、學號與時間等;課程設計報告內容主要包括:(1)課程設計的目的;(2)課程設計的內容:主要包括:游戲的故事摘要 ;游戲的類型;各成員的分工;制作工具;流程圖以及如何玩這個游戲。重點寫明設計思想,制作步驟、制作過程中出現的問題、
4、解決方案等;(3)總結:總結成功之處與問題所在,自己通過本次課程設計有什么收獲和感悟。四、課程設計考核與成績評定根據學生的實驗準備、操作能力、實驗結果、實驗報告質量、實驗紀律等綜合評定實驗成績。(1)總分100分:其中考勤10分,作品50分,課程設計報告40分;(2)考勤每天上、下午1次,每次2分;(3)如發(fā)現有嚴重抄襲者,個人成績以零分計;(4)課程設計報告以準確、規(guī)范、認真等指標進行打分,不得抄襲,否則總成績按零分計。五、課程設計紀律及注意事項(1)每位參加課程設計的同學必須認真對待,積極參加;(2)從嚴要求自己,不隨意遲到、早退和曠課,有事需例行請假手續(xù),實驗室內不得玩計算機游戲;(3)
5、在課程設計中應積極發(fā)揮個人主觀能動性,勤于思考,虛心向指導教師、實驗室教師請教,服從實驗室教師的安排;(4)愛護實驗室的所有財產,不得私自刪除機器上系統文件;(5)保持實驗室的整潔衛(wèi)生。凡違反課程設計紀律者,指導教師或實驗室教師有權進行批評教育或終止其課程設計,成績以零分記。DirectX初級教程1. 開發(fā)環(huán)境32. 3D基本概念32.1 幾種顏色的變量類型及其相關函數應注意區(qū)分:32.2 材質42.3 向量42.4 光源42.5 攝像機(camera)43. 創(chuàng)建D3D設備53.1 Direct3DCreate9 ( )53.2 CreateDevice ( )53.3 基本變量53.4 其
6、他要調用的函數及變量(調用次數較少)54. 基本渲染頂點64.1 定義頂點格式和;64.2 創(chuàng)建頂點緩沖區(qū)并填充之;64.3D3D進行渲染;75. 使用頂點索引緩沖區(qū)85.1 創(chuàng)建頂點索引緩沖區(qū)并填充之85.2 將頂點索引緩沖區(qū)設置到渲染管道流水線96. 攝像機106.1 D3D中使用的幾種常用的向量106.2D3D相機中使用的幾種常用的關于向量的函數106.3點和向量的區(qū)別116.3 Camera相機矩陣計算問題117.基本紋理應用127.1 紋理尺寸127.2 紋理坐標127.3 基本紋理添加步驟以及所使用的函數128.模型加載141.裝載模型142.填充紋理和材質143.渲染
7、141. 開發(fā)環(huán)境注意,一定要把新加的SDK路徑移動到目錄列表的最上方,因為VC是按順序搜索路徑的。最基本的DX定義規(guī)范:I開頭的是接口;D3D開頭的一般是定義的一些結構;D3DX是封裝了操作的擴展結構;2. 3D基本概念2.1 幾種顏色的變量類型及其相關函數應注意區(qū)分:D3DCOLOR、D3DXCOLOR、D3DCOLORVALUE。注意:1. D3DCOLOR屬于DWORD型的變量,其定義包含在d3d9types.h文件中;2. D3DXCOLOR屬于結構體類型,其定義包含在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同屬于結構體類型,其定義包含在d3d9types.h文件中:typedef struct _D3DCOLORVALUE float r; float g; float b; float a; D3DCOLORVALUE; / r, g, b, a的范圍在0.0f-1.0f之間與各個變量相對應的函數或宏也包含在與變量相對應的頭文件中(帶有x的變量其對應
9、頭文件也包含x,方便記憶)。下邊介紹相關函數及宏。1. 與D3DCOLOR相對應的宏有以下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值均為整型數,最后一個必須是從0.0到1.0的浮點型數。2.2 材質材質的定義是:材質typedef struct _D3DMATERIAL9 D3DCOLORVALUE Diffuse; / 漫反射光D3DCOLORVALUE Ambient; / 環(huán)境光,理解為整
11、體亮度D3DCOLORVALUE Specular; / 鏡面反射,一般用于光滑的平面D3DCOLORVALUE Emissive; / 放射光,一般用于自發(fā)光體(太陽、燈) 對于材質設置,自發(fā)光不應太強。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)建點光源無效可忽略??梢允欠菃挝幌蛄浚遣荒苁?向量)float Range; / 光的范圍,就是能照多遠(對方向光無效,如果創(chuàng)建方向光源可忽略)float Falloff; / 聚光內外光圈的
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; / 指定聚光內圈的夾角大?。?-Phi)(只針對聚焦光源) float Phi; / 指定聚光外圈的夾角大?。?-pi)(只針對聚焦光源) D3DLIGHT9;注:1. 這
14、里非方向光源指 點光源 和 聚焦光源。2. 添加光照并開啟光照,而且必須為模型或面添加了法向量及材質,光源才起作用。 即光照三要素:光照、材質、法向量。2.5 攝像機(camera)攝像機的確定有兩個主要參數:一個位置和一個方向。將攝像機設置到場景中要用到SetTransform( D3DTS_VIEW, &m_matView ); / m_matView就是攝象機的觀察矩陣。3. 創(chuàng)建D3D設備所需的主要的2個函數和3個變量(其余函數根據所需變量的填充要求而定)3.1 Direct3DCreate9 ( )其原型為IDirect3D9 * Direct3DCreate9
15、( UINT SDKVersion ); SDKVersion為SDK版本值,函數及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 );參數解釋:UINT Adapter 一般使用D3DADAPTER_DEFAULT代表主適配器(即顯示器);D3DDEVTYPE DeviceTypeD3DDEVTYPE_HAL代表使用硬件加速方式,D3DDEVTYPE_REF代表使用軟件仿真方式;HWND
17、hFocusWindow代表要創(chuàng)建D3D設備的窗口的句柄 DWORD BehaviorFlags處理標識:最常用的選項有 D3DCREATE_HARDWARE_VERTEXPROCESSING硬件處理 D3DCREATE_SOFTWARE_VERTEXPROCESSING軟件處理D3DCREATE_MIXED_VERTEXPROCESSING軟硬件結合處理D3DPRESENT_PARAMETERS *pPresentationParameters描述設備顯示參數的結構體,一般要調用其他函數來填充該結構體;IDirect3DDev
18、ice9* ppReturnedDeviceInterface用于返回D3D的設備對象指針。3.3 基本變量 D3DCAPS9、D3DDISPLAYMODE、D3DPRESENT_PARAMETERS三個比較基本的變量,用于描述顯示設備創(chuàng)建時的相關參數。3.4 其他要調用的函數及變量(調用次數較少) 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、 頂點顏色;與之相對應的FVF為藍色部分。#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)4.2 創(chuàng)建頂點緩沖區(qū)并填充之; 使用的基本函數有:1. CreateVertexBuffer(); HRESULT CreateVertexBuffer( UINT Length, DWORD Usage, DWORD FVF,
21、 D3DPOOL Pool, IDirect3DVertexBuffer9* ppVertexBuffer, HANDLE* pHandle);UINT Length用來指定頂點緩沖區(qū)的大?。籇WORD Usage一般設置為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 一般設置為NULL。2. Lock() HRESULT Lock( UINT OffsetToLock, UINT SizeToLock,
23、; VOID *ppbData, DWORD Flags);UINT OffsetToLock,鎖定區(qū)域偏移量,一般為0; UINT SizeToLock, 要鎖定區(qū)域的大??; VOID *ppbData, 返回指向緩沖區(qū)數據的指針; DWORD Flags 鎖定行為標識符,一般設置為0;3. memcpy( )(用此函數將計算好的數據拷貝進緩沖
24、區(qū)),如memcpy(in,out,sizeof(buffer);4. HRESULT Unlock(VOID); 解除對數據區(qū)的鎖定,一邊流水線渲染可以正常執(zhí)行。4.3 D3D進行渲染;有兩個基本函數:1. SetStreamSource()用于將頂緩沖區(qū)設置到流水線中; HRESULT SetStreamSource( UINT StreamNumber, IDirect3DVertexBuffer9 *pStreamData,
25、60; UINT OffsetInBytes, UINT Stride ); UINT StreamNumber 一般設置為0;IDirect3DVertexBuffer9 *pStreamData 指向頂點緩沖區(qū)COM對象的指針; UINT OffsetInBytes 指針偏移量不偏移則取0; UINT Stride 頂點跨距,即每個頂點所占的字節(jié)數2. SetFVF()用于將頂
26、點自定義格式傳遞給流水線。注:IDirect3DDevice9:SetFVF(Vertex:FVF) FVF保存著頂點描述,FVF的定義形式如下: #define FVF (D3DFVF_XYZ|D3DFVF_DIFFUSE)或 DWORD const dwFVF = ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE ); D3DFVF_XYZ:表示頂點格式中包含頂點坐標信息。它告知系統你的游戲沒有變換過頂點,要求Direct3D來做頂點的變換工作。 D3DFVF_XYZRHW:告知系統你的游戲引擎已對頂點作過
27、變換,Direct3D不需要再對它們作變換。也就是說,Direct3D就不會再用世界矩陣、觀察矩陣或投射矩陣來變換頂點了。 D3DFVF_DIFFUSE:表示頂點格式中包含了一個漫反射顏色信息。 D3DFVF_SPECULAR:表示頂點格式中包含一個鏡面反射顏色成分。 D3DFVF_NORMAL:表示頂點格式中包含有頂點朝向信息(即法線向量)。 D3DFVF_TEX0 D3DFVF_TEX8:包含頂點格式坐標的個數(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, /點,圖元個數N D3DPT_LINELIST = 2,/線,圖元個數為N/2 D3DPT_LINESTRIP = 3,/ D3DPT_TRIANGLELIST = 4, D3DPT_TRIANGLESTRIP = 5, D3DPT_TRIANGLEFAN = 6, D3DPT_FORCE_DWORD = 0x7fffffff, D3DPRIMITIVETYP
31、E, *LPD3DPRIMITIVETYPE; StarVertex:設置從頂點緩沖區(qū)中的第幾個頂點畫起。 PrimitiveCount:要繪畫的圖元的數量。 3. DrawPrimitive() HRESULT DrawPrimitive( D3DPRIMITIVETYPE PrimitiveType, 圖元類型 UINT StartVertex, 起始頂點 UINT PrimitiveCount 要繪制的圖元個數);完成上
32、述過程就可以對定點進行渲染了。渲染函數DrawPrimitive()不對頂點的格式進行再次檢查:比如同一個緩沖區(qū)可以,你本來打算是用來畫三角形列表,但也可以畫直線,或者三角形帶、扇形等,函數不會再次檢查。5. 使用頂點索引緩沖區(qū)在一個3D模型中一個點可能要同時處于多個三角形面上,如果直接把頂點數據放進緩沖區(qū),那么重復的頂點就會占用多余的內存。使用頂點緩沖區(qū)把頂點的具體數據和代表三角形的頂點的索引分開存儲,頂點數據還是放到頂點緩沖區(qū)中,頂點索引存儲在頂點索引緩沖區(qū)中,這樣可以節(jié)省不少內存,避免點的重復存儲。5.1 創(chuàng)建頂點索引緩沖區(qū)并填充之使用到的函數: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ū)并返回索引數據區(qū)指針; UINT OffsetToLock 鎖定偏移量,一般設置為0; UINT SizeToLock 頂點索引緩沖區(qū)的字節(jié)數,等于頂點索引個數 * 索引位深 / 8; VOID *ppbData 返回指向頂點索引緩沖數據區(qū)的指針,以便數據復制; DWORD Flags 一般設置為0;3. HRESULT Unlock (VOID);用于解除頂點索引緩
37、沖區(qū)區(qū)注意:一般手動填充頂點索引緩沖區(qū),因為那幾個頂點構成一個三角形有自己來確定;5.2 將頂點索引緩沖區(qū)設置到渲染管道流水線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ū)中的頂點數量; UINT StartIndex, 起始的頂點索引,一般為0; UINT PrimitiveCount 需要渲染的圖元的個數;頂點索引緩沖區(qū)中的頂點順序很重要,因為默認情況下,流水線只繪制點排列順序為逆時針的三角形,而不繪制排列順序為順時針的三角形(可以
40、設置為NOCULL模式這樣渲染管線不裁剪)。包含D3DFVF_XYZRHW的點可以直接繪制在屏幕上,而不需要變換。這是因為生成一個包含D3DFVF_XYZRHW屬性的VertexBuffer對象,渲染流水線會認為改點已經進行了頂點變換,不要再將頂點數據作變換(不乘世界矩陣,視矩陣,投影矩陣)。這是繪圖時用的坐標系可以理解為簡單的屏幕坐標系(即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頭文件中,其為結構體,定義如下: 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相機中使用的幾種常用的關于向量的函數1. D3DXVec3Dot ();2. D3DXVec3Normalize ();3. D3DXVec3Cross ();4. D3DXMatrixRotationAxis ();5. D3DXVec3TransformCoord ();介紹:1. FLOAT D3DXVec3Dot
44、( CONST D3DXVECTOR3 *pV1,CONST D3DXVECTOR3 *pV2 ); 該函數用于計算兩個三維向量的點乘,并返回最終結果。2. D3DXVECTOR3 * WINAPI D3DXVec3Normalize( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV );該函數用于計算第二個向量的單位向量(即歸一化向量),第二個參數為source即傳入向量,并將計算結果存放于第一個參數中或返
45、回。 3. D3DXVECTOR3 * D3DXVec3Cross( D3DXVECTOR3 * pOut, CONST D3DXVECTOR3 * pV1, CONST D3DXVECTOR3 * pV2 ); 該函數用于計算后兩個向量的叉乘,并將結果放于第一個參數中或返回。4. D3DXMATRIX * D3DXMatrixRotationAxis ( D3DXMATRIX * pOut, &
46、#160; CONST D3DXVECTOR3 * pV, FLOAT Angle );D3DXMATRIX * pOut根據旋轉角度和轉軸計算出來的繞pV軸旋轉Angle弧度應使用的旋轉矩陣。 CONST D3DXVECTOR3 * pV用于定義旋轉軸的向量。 FLOAT Angle 旋轉過的弧度,因為實在左手坐標系中,所以順時針轉動為正。Angles are measured clo
47、ckwise when looking along the rotation axis toward the origin5. 下面來看看D3DXVec3TransformCoord()函數:D3DXVECTOR3 * D3DXVec3TransformCoord( D3DXVECTOR3 * pOut, CONST D3DXVECTOR3 * pV, CONST D3DXMATRIX * pM );計算點pV經過矩陣pM旋轉后的值,并將值放于p
48、Out中或返回。6.3 點和向量的區(qū)別坐標和向量是有區(qū)別的:向量的第四維數值是0,坐標的第四維數值是1;向量 = 兩個坐標的差值 ,第四維同樣做減法,結果是0;向量的坐標變換用D3DXVec3TransformNormal, 點的變換用D3DXVec3TransformCoord。D3DXVec3Transform和D3DXVec3TransformCoord相似,區(qū)別在于后者變換后將w投射回1。6.3 Camera相機矩陣計算問題參見函數D3DXMatrixLookatLH()其最終計算出來的相機矩陣各個參數如下: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.基本紋理應用7.1 紋理尺寸紋理都是2D的圖片,它可以保存為bmp、tga、jpg或是任何一種常見的圖片格式,所以它肯定有大小。雖然理論上現在的新型顯卡可以支持任意尺寸的紋理,不過為了兼容以前的顯卡也為了程序的執(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)來設置一個點的紋理坐標,U是橫軸、是縱軸。紋理的左上角為(0,0),右下角為(1,1)。7.3 基本紋理添加步驟以及所使用的函數1. 為頂點添加紋理坐標u、v并修改頂點的FVF2. 定義紋理對象指針并創(chuàng)建紋理對象。 如: LPDIRECT3DTEXTURE9 ppTexture; / 定義紋理對象指針 HRESULT D3DXCreateTextureFromFile( LPDIRECT3DDEVICE9 pDev
53、ice, LPCTSTR pSrcFile, LPDIRECT3DTEXTURE9 * ppTexture ); LPDIRECT3DDEVICE9 pDevice, / 設備對象 LPCTSTR pSrcFile, / 待作為紋理的圖像名稱LPDIRECT3DTEXTURE9 * ppTexture ); / 紋理對象指針3. 將紋理設置到渲染管線并渲染1. HRESULT SetText
54、ure( DWORD Sampler, /將一張紋理指派給設備中的某個特定的階段 IDirect3DBaseTexture9 * pTexture) /紋理對象指針 SetTexture()方法將一張紋理指派給設備中的某個特定的階段。Direct3D提供了8個階段(0到7),這意味著可以為一次DrawPrimitive()調用同時設置最多8張紋理。(然而,你也可以多次調用DrawPrimitive(),這稱“多次渲染”)。SetTexture()的第一個參數中給出一個希望使用的紋理階段編號。第二個參數為紋理對象指針。當一個應用程序選擇了一張紋理作為當前紋理時,它就指示Direct3D設備在下一次改變當前紋理之前,一直將該紋理應用到所有被渲染的圖元上去。如果3D場景中的每個圖元都有其自己的紋理,則必需在繪制每個圖元之前設置相應的紋理,也就是說應在調用DrawPrimitive()函數之前進行紋理設置。 2. HRESULT SetTextureStageState( D
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國防滑毛刺丁腈手套市場分析及競爭策略研究報告
- 2025至2030年中國貼片式普通整流二極管市場分析及競爭策略研究報告
- 2025至2030年中國膩子灰市場分析及競爭策略研究報告
- 2025至2030年中國筆式變倍顯微鏡市場分析及競爭策略研究報告
- 2025至2030年中國皇刮漿筆市場分析及競爭策略研究報告
- 2025至2030年中國環(huán)保廢舊輪胎磨粉機市場分析及競爭策略研究報告
- 2025至2030年中國滌棉紡織品市場分析及競爭策略研究報告
- 2025至2030年中國氣動工具零件市場分析及競爭策略研究報告
- 2025至2030年中國智能型住宅管理系統市場分析及競爭策略研究報告
- 2025至2030年中國手自動封口機市場分析及競爭策略研究報告
- 孤獨癥相關培訓課件
- 2025至2030中國數據中心液冷行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- Unit 2 Home Sweet Home 第5課時(Section B 2a-3c) 2025-2026學年人教版英語八年級下冊
- 高水平研究型大學建設中教育、科技與人才的協同發(fā)展研究
- 山西省2025年普通高中學業(yè)水平合格性考試適應性測試化學試卷(含答案)
- 房屋市政工程生產安全重大事故隱患臺賬
- 2025年中考一模卷(貴州)英語試題含答案解析
- T/ISEAA 006-2024大模型系統安全測評要求
- 礦山股東協議書
- 數字媒體藝術與設計原理2025年考試試卷及答案
- 小學一年級語文下冊語文看拼音寫詞語全冊
評論
0/150
提交評論