幾何模型顯示_第1頁(yè)
幾何模型顯示_第2頁(yè)
幾何模型顯示_第3頁(yè)
幾何模型顯示_第4頁(yè)
幾何模型顯示_第5頁(yè)
已閱讀5頁(yè),還剩38頁(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、第3章 坐標(biāo)系與基本圖元1Direct3D坐標(biāo)系在空間幾何中,絕大多數(shù)情況下使用笛卡爾坐標(biāo)系為參照系來(lái)表示圖形,表三維圖形時(shí)需要使用三維笛卡爾坐標(biāo)系。三維笛卡爾坐標(biāo)系根據(jù)z坐標(biāo)軸相對(duì)x,y坐標(biāo)軸方向的不同,可分為左手坐標(biāo)系和右手坐標(biāo)系,它們的區(qū)別方法是:將右手食指、中指、無(wú)名指和小拇指順著x軸正向到y(tǒng)軸正向旋轉(zhuǎn)的方向,如果大拇指的方向和z軸正向相同,就是右手坐標(biāo)系,反之就左手坐標(biāo)系。2xyzxyzxyz左手坐標(biāo)系右手坐標(biāo)系Direct程序中常用坐標(biāo)系3(150,50)(50,250)(250,250)4本程序執(zhí)行結(jié)果5FVF靈活頂點(diǎn)格式FVF(Flexible Vertex Format)用來(lái)

2、描述在頂點(diǎn)緩沖區(qū)中的頂點(diǎn)存儲(chǔ)格式中包含了哪些屬性。根據(jù)圖形顯示的需要,頂緩沖區(qū)中的格式可以包含頂點(diǎn)坐標(biāo)、顏色、法線方向、紋理坐標(biāo)等屬性。6名稱用途頂點(diǎn)坐標(biāo)表現(xiàn)頂點(diǎn)三維坐標(biāo)RHW坐標(biāo)系的W值,具有該值才是完成變換的頂點(diǎn)結(jié)合浮點(diǎn)值用于蒙皮制作,詳見(jiàn)后面介紹法線向量表現(xiàn)頂點(diǎn)的法線向量,主要用于光源處理擴(kuò)散光RGBA(r,g,b,a)宏值,表現(xiàn)苦戰(zhàn)的擴(kuò)散光顏色反射光RGBA(r,g,b,a)宏值,表現(xiàn)項(xiàng)占的反射色紋理坐標(biāo)表現(xiàn)紋理坐標(biāo)值,D3D可以同時(shí)使用8個(gè)紋理坐標(biāo),比如:想要進(jìn)行法線,就可以將第一個(gè)值設(shè)定為擴(kuò)散數(shù)據(jù),將第二個(gè)值設(shè)定為法線貼圖數(shù)據(jù)。FVF標(biāo)記數(shù)據(jù)的用途7值說(shuō)明D3DFVF_DIFFUS

3、E頂點(diǎn)格式包含漫反射顏色值D3DFVF_NORMAL頂點(diǎn)格式包含法線向量,不能和D3DFVFXYZRHW同時(shí)使用D3DFVF_PSIZE頂點(diǎn)信息指明繪制點(diǎn)的大小D3DFVF_SPECULAR頂點(diǎn)格式包含鏡面反射顏色值D3DFVF_XYZ頂點(diǎn)格式包含未經(jīng)坐標(biāo)轉(zhuǎn)的頂點(diǎn)坐標(biāo),不能和D3DFVF_XYZRHW同時(shí)使用D3DFVF_XYZRHW頂點(diǎn)格式包含經(jīng)過(guò)坐標(biāo)轉(zhuǎn)換的頂點(diǎn)坐標(biāo),不能和D3DFVF_NORMAL或D3DFVF_XYZ同時(shí)使用。D3DFVF_XYZB1D3DFVF_XYZB5頂點(diǎn)格式包含用于骨骼動(dòng)畫(huà)的頂點(diǎn)和頂點(diǎn)對(duì)骨骼的權(quán)值信息。D3DFVF_XYZW頂點(diǎn)格式包含經(jīng)過(guò)坐標(biāo)轉(zhuǎn)換和裁判的頂點(diǎn)坐標(biāo)

4、,只可用于可編程頂點(diǎn)流水線D3DFVF_TEXT0-D3DFVF _TEXT8頂點(diǎn)格式包含08個(gè)紋理坐標(biāo),用于紋理繪制。FVF靈活頂點(diǎn)格式說(shuō)明符8struct CUSTOMVERTEXfloat x,y,z,rhw,color;#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)CUSTOMVERTEX vertices = 150.0f, 50.0f, 0.5f, 1.0f, 0 xffff0000, , / x, y, z, rhw, color 250.0f, 250.0f, 0.5f, 1.0f, 0 xff00ff00, ,

5、50.0f, 250.0f, 0.5f, 1.0f, 0 xff00ffff, , ;三角形的FVF定義如下:9文件首部#include LPDIRECT3D9 g_pD3D = NULL; LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; /頂點(diǎn)緩沖區(qū)struct CUSTOMVERTEX FLOAT x, y, z, rhw; /頂點(diǎn)坐標(biāo) DWORD color; / 頂點(diǎn)顏色;#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFU

6、SE)10顏色值的順序0 xAARRGGBBALPHA值:0 x000 xffR、G、B均為:0 x00 0 xff11HRESULT InitVB() CUSTOMVERTEX vertices = 150.0f, 50.0f, 0.5f, 1.0f, 0 xffff0000, , / x, y, z, rhw, color 250.0f, 250.0f, 0.5f, 1.0f, 0 xff00ff00, , 50.0f, 250.0f, 0.5f, 1.0f, 0 xff00ffff, , ; if( FAILED( g_pd3dDevice-CreateVertexBuffer( 3*s

7、izeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL ) ) ) return E_FAIL; VOID* pVertices; if( FAILED( g_pVB-Lock( 0, sizeof(vertices), (void*)&pVertices, 0 ) ) ) return E_FAIL; memcpy( pVertices, vertices, sizeof(vertices) ); g_pVB-Unlock(); return S_OK;12創(chuàng)建頂點(diǎn)緩沖區(qū)在使用頂緩沖區(qū)繪圖前,首先要

8、創(chuàng)建頂點(diǎn)緩沖區(qū),其原型如下:HRESULT IDirect3DDevice9:CreateVertexBuffer( UINT Length,/頂點(diǎn)緩沖區(qū)的大小 DWORD Usage,/頂點(diǎn)緩沖區(qū)的屬性 DWORD FVF,/靈活頂點(diǎn)格式 D3DPOOL Pool,/在內(nèi)存中的位置 IDirect3DVertexBuffer9* ppVertexBuffer,/緩沖 /區(qū)指針 Handle* pSharedHandle/保留參數(shù))13CreateVertexBuffer()參數(shù)說(shuō)明參數(shù)名稱作用Length將要?jiǎng)?chuàng)建的頂點(diǎn)緩沖的字節(jié)單位大小Usage指定頂點(diǎn)緩沖的類型或處理方式FVF由頂點(diǎn)信息結(jié)

9、構(gòu)聲明的FVF標(biāo)記值Pool指定頂點(diǎn)緩沖要存儲(chǔ)的存儲(chǔ)器位置和管理方式。ppVertexBuffer要變換的頂點(diǎn)緩沖界面14Usage:一般設(shè)為0或取下列值值說(shuō)明D3DUSAGE_DONOTCLIP禁用裁減,D3DRSCLIPPING必須設(shè)為FALSE。D3DUSAGE_DYNAMIC頂點(diǎn)緩沖區(qū)使用動(dòng)態(tài)內(nèi)存D3DUSAGE_NPATCHES使用頂點(diǎn)緩沖區(qū)繪制N-patches曲線D3DUSAGE_POINTS使用頂點(diǎn)緩沖區(qū)繪制點(diǎn)D3DUSAGE_RTPATCHES使用頂點(diǎn)緩沖區(qū)繪制曲線D3DUSAGE_SOFTWAREPROCESSING當(dāng)設(shè)置該屬性時(shí),表示使用軟件進(jìn)行頂點(diǎn)運(yùn)算,否則使用硬件進(jìn)行

10、頂點(diǎn)運(yùn)算。D3DUSAGE_WRITEONLY只寫(xiě)屬性,不能進(jìn)行讀操作,設(shè)置該屬性可以提高系統(tǒng)性能。15D3DPOOL取值D3DPOOL_DEFAULT頂點(diǎn)緩沖區(qū)盡可能存在于顯示內(nèi)存中。D3DPOOL_MANAGED由Direct3D系統(tǒng)自動(dòng)高度頂點(diǎn)緩沖區(qū)內(nèi)存位置D3DPOOL_SYSTEMMEM頂點(diǎn)緩沖區(qū)位于計(jì)算機(jī)系統(tǒng)內(nèi)存中D3DPOOL_SCRATCH頂點(diǎn)緩沖區(qū)位于計(jì)算機(jī)臨時(shí)內(nèi)存中,這種類型的頂點(diǎn)緩沖不能直接用于渲染操作,只能進(jìn)行內(nèi)存加鎖16向頂點(diǎn)緩沖區(qū)寫(xiě)入數(shù)據(jù)如果不向頂點(diǎn)緩沖區(qū)填入有用數(shù)據(jù)的話,頂點(diǎn)緩沖是沒(méi)有用的,所以必須向頂點(diǎn)緩沖填充數(shù)據(jù),在寫(xiě)入數(shù)據(jù)前需要調(diào)用Lock函數(shù)加鎖緩沖區(qū)。1

11、7Lock()函數(shù)原型HRESULT IDirect3DVertexBuffer:Lock( UINT OffsetToLock,/加鎖地址 UINT SizeToLock, /加鎖內(nèi)存大小 VOID* ppbDATA, /內(nèi)存指針地址 DWORD flags/加鎖屬性);18Lock參數(shù)說(shuō)明參數(shù)名稱說(shuō)明OffsetToLock執(zhí)行Lock時(shí),緩沖的起始地址。SizeToLock執(zhí)行Lock時(shí),緩沖大小ppbData可以讀寫(xiě)的存儲(chǔ)器指針Flags執(zhí)行Lock時(shí)使用的標(biāo)記19緩沖區(qū)加鎖屬性可取下列值或0值說(shuō)明D3DLOCK_DISCARD更新整個(gè)緩沖區(qū)D3DLOCK_NO_DIRTY_UPDAT

12、E在缺少狀態(tài)下,對(duì)緩沖區(qū)加鎖會(huì)對(duì)該區(qū)域設(shè)置一個(gè)Dirty標(biāo)記。該屬性將不對(duì)該區(qū)域設(shè)置Dirty標(biāo)記,當(dāng)?shù)鼐彌_區(qū)有特殊需要時(shí)使用。D3DLOCK_NOOVERWRITE保證不覆蓋緩沖區(qū)數(shù)據(jù),設(shè)置該屬性可以立即返回內(nèi)存指針,提高系統(tǒng)性能。D3DLOCK_NOSYSLOCK在加鎖過(guò)程中系統(tǒng)可進(jìn)行其他操作D3DLOCK_READONLY設(shè)置緩沖區(qū)為只讀屬性20頂點(diǎn)緩沖區(qū)圖形顯示21Render()函數(shù)VOID Render()g_pd3dDevice-Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 ); if( SUCC

13、EEDED( g_pd3dDevice-BeginScene() ) ) g_pd3dDevice-SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) ); g_pd3dDevice-SetFVF( D3DFVF_CUSTOMVERTEX ); g_pd3dDevice-DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 ); g_pd3dDevice-EndScene(); g_pd3dDevice-Present( NULL, NULL, NULL, NULL );22SetStreamSource()函數(shù)原型H

14、RESULTIDirect3DDevice9:SetStreamSource( UINT StreamNumber,/渲染數(shù)據(jù)流序號(hào) IDirect3DVertexBuffer9* pStreamData, /進(jìn)行綁定鏈接的頂點(diǎn)緩沖區(qū)指針 UINT OffsetInBytes,/進(jìn)行綁定鏈接的渲染數(shù)據(jù)流的起始位置 UINT Stride/渲染數(shù)據(jù)流中一個(gè)頂點(diǎn)所占的內(nèi)存大小。);23SetFVF()函數(shù)原型HRESULT IDirect3DDevice9:SetFVF( DWORD FVF/渲染數(shù)據(jù)流中的靈活頂點(diǎn)格式);24D3D圖元繪制函數(shù)HRESHULT IDirect3DDevice9:D

15、rawPrimive( D3DPRIMIVETYPE PrimitiveType,/圖元類型 UINT StartVertex,/起始點(diǎn)位置 UINT PrimitiveCount/圖元數(shù)目);256種基本圖元圖元類型Direct3D表示含義頂點(diǎn)集D3DPT_POINTLIST一組點(diǎn)線段集D3DPT_LINELIST一組線段線段帶D3DPT_LINESTRIP不間斷的一組線段三角形集D3DPT_TRIANGLELIST一組三角形三角形帶D3DPT_TRIANGLESTRIP一組不間斷的三角形三角形扇D3DPT_TRIANGLEFAN一組共用一點(diǎn)的扇形三角形26g_d3dDevice-DrawP

16、rimitive(D3DPT_POINTLIST,0,6)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)27g_d3dDevice-DrawPrimitive(D3DPT_LINELIST,0,3)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)28g_d3dDevice-DrawPrimitive(D3DPT_LINESTRIP,0,5)(0.0,5.0,0.0)(0.0,5.

17、0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)29g_d3dDevice-DrawPrimitive(D3DPT_TRIANGLELIST,0,2)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)30g_d3dDevice-DrawPrimitive(D3DPT_TRIANGLESTRIP,0,4)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,0.0)(0.0,5.0,

18、0.0)(0.0,5.0,0.0)31D3DPTTRIANGLEFAN示例32基本圖元顯示實(shí)例33使用索引緩沖區(qū)繪制圖形34頂點(diǎn)結(jié)構(gòu)及類型的定義Struct CUSTOMVERTEX FLOAT x,y,z,rhw; DWORD color;#define D3DFVF_CUTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)3536頂點(diǎn)數(shù)組及索引數(shù)組的定義CUSTOMVERTEX g_Vertices9;g_Vertices0.x = 300;g_Vertices0.y = 250;g_Vertices0.z = 0.5f;g_Vertices0.rhw = 1.

19、0f;g_Vertices0.color = 0 xffff0000;for(int i=0; iCreateIndexBuffer(sizeof(g_Index), 0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,&g_pIB,NULL)return E_FAIL;VOID* pIndices;if(FAILED(g_pIB-Lock(0,sizeof(g_Index),(VOID*)&pIndices,NULL)return E_FAIL;memcpy(pIndices,g_Index,sizeof(g_Index);g_pIB-Unlock();39CreateIndexBuffer函數(shù)原型CreateIndexBuffer( UINT Len

溫馨提示

  • 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)論