Unity基本圖形繪制ppt課件_第1頁(yè)
Unity基本圖形繪制ppt課件_第2頁(yè)
Unity基本圖形繪制ppt課件_第3頁(yè)
Unity基本圖形繪制ppt課件_第4頁(yè)
Unity基本圖形繪制ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩25頁(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、繪制根本圖形學(xué)習(xí)重點(diǎn):DX根本圖元圖元繪制學(xué)習(xí)目的:可以靈敏運(yùn)用各種圖元1.圖形繪制1.1圖元游戲中的模型不論有多復(fù)雜,都是有點(diǎn)、線、三角形面拼接起來(lái)的。1.圖形繪制1.1圖元圖元Primitive是由Direct3D定義的根本的圖形表示單位,一切的復(fù)雜物體都是由這些根本圖元來(lái)組合而成的。圖元類型Direct3D定義含義點(diǎn)列集合D3DPT_POINTLIST一組點(diǎn)的集合線列集合D3DPT_LINELIST一組線段的集合線帶集合D3DPT_LINESTRIP首尾相連的線段的集合三角形列D3DPT_TRIANGLELIST一組三角形的集合三角形帶D3DPT_TRIANGLESTRIP首尾相連的三角

2、形,有兩個(gè)頂點(diǎn)重合三角形扇D3DPT_TRIANGLEFAN組成扇形的一組三角形1.圖形繪制1.1圖元DrawPrimitiveUP是Direct3D提供的根本圖元繪制函數(shù)之一。HRESULTDrawPrimitiveUP(D3DPRIMITIVETYPEPrimitiveType,/根本圖元類型UINTPrimitiveCount/繪制的圖元的數(shù)量constvoid*pVertexStreamZeroData,/頂點(diǎn)的起始地址UINTVertexStreamZeroStride/每個(gè)頂點(diǎn)所占的字節(jié)數(shù)); 點(diǎn)列POINTLIST點(diǎn)列由一系列的頂點(diǎn)組成。g_pDevice-DrawPrimiti

3、veUP(D3DPT_POINTLIST,6,數(shù)組首地址,sizeof(一個(gè)頂點(diǎn)字節(jié)數(shù));1.圖形繪制1.1圖元線列LINELIST線列由一系列的線段組成。線帶LINESTRIP線帶由一系列的線段組成,前一個(gè)線段的終點(diǎn)是下一條線段的起點(diǎn)。g_pDevice-DrawPrimitiveUP(D3DPT_LINELIST,3,數(shù)組首地址,sizeof(一個(gè)頂點(diǎn)字節(jié)數(shù));g_pDevice-DrawPrimitiveUP(D3DPT_LINESTRIP,5,數(shù)組首地址,sizeof(一個(gè)頂點(diǎn)字節(jié)數(shù));1.圖形繪制1.1圖元三角形列由一系列的三角形組成。三角形列TRIANGLELIST三角形帶TRIA

4、NGLESTRIP三角形帶由一系列的三角形組成,除了第一個(gè)三角形,其他的三角形只需求輸入第三個(gè)頂點(diǎn),這個(gè)頂點(diǎn)與前一個(gè)三角形中的后兩個(gè)頂點(diǎn)組成新的三角形。g_pDevice-DrawPrimitiveUP(D3DPT_TRIANGLELIST,2,數(shù)組首地址,sizeof(一個(gè)頂點(diǎn)字節(jié)數(shù));g_pDevice-DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,4,數(shù)組首地址,sizeof(一個(gè)頂點(diǎn)字節(jié)數(shù));1.圖形繪制1.1圖元三角形扇TRIANGLEFAN三角形扇是以扇形擴(kuò)展的方式來(lái)定義三角形序列的。g_pDevice-DrawPrimitiveUP(D3DPT_TRIA

5、NGLEFAN,3,數(shù)組首地址,sizeof(一個(gè)頂點(diǎn)字節(jié)數(shù));1.圖形繪制1.2頂點(diǎn)的格式頂點(diǎn)Vertex是一切物體的最根本元素,對(duì)應(yīng)著三維空間坐標(biāo)系中的一個(gè)點(diǎn)。在Direct3D中,描畫(huà)一個(gè)點(diǎn)的方法非常豐富靈敏,可以經(jīng)過(guò)特殊的組合來(lái)描畫(huà)空間中點(diǎn)的各種屬性。Direct3D引入了一個(gè)稱為靈敏頂點(diǎn)格式FVF:FlexibleVertexFormat的概念。靈敏頂點(diǎn)格式是用來(lái)描畫(huà)頂點(diǎn)屬性的一種方法,這種方法可以由本人來(lái)定義頂點(diǎn)格式。FVF這種靈敏的頂點(diǎn)組織方式使圖形繪制中只需求運(yùn)用頂點(diǎn)必要的組成部分,從而節(jié)省了大量的內(nèi)存帶寬和渲染時(shí)間。1.圖形繪制1.2頂點(diǎn)的格式1.圖形繪制1.2頂點(diǎn)的格式Di

6、rect3D定義的靈敏頂點(diǎn)格式可以是以下類型的組合:值說(shuō)明D3DFVF_DIFFUSE頂點(diǎn)漫反射顏色值D3DFVF_NORMAL頂點(diǎn)格式包含法線向量D3DFVF_PSIZE指明繪制頂點(diǎn)的大小D3DFVF_SPECULAR頂點(diǎn)鏡面反射顏色值D3DFVF_XYZ頂點(diǎn)是未經(jīng)坐標(biāo)轉(zhuǎn)換的坐標(biāo)D3DFVF_XYZRHW頂點(diǎn)包括經(jīng)過(guò)坐標(biāo)轉(zhuǎn)換的坐標(biāo)D3DFVF_XYZB1.D3DFVF_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)D3DFVF_TEX0.D3DFVF_TEX8頂點(diǎn)格式包括08個(gè)紋理坐標(biāo) 假設(shè)運(yùn)用靈敏頂點(diǎn)格式,必需以

7、以下順序來(lái)格式化一切的頂點(diǎn):位置,RHW,混合加權(quán)值,頂點(diǎn)法線,反射顏色,紋理坐標(biāo)集(1-8套)。1.圖形繪制1.2頂點(diǎn)的格式頂點(diǎn)格式的數(shù)據(jù)類型1.圖形繪制1.3頂點(diǎn)的定義1.聲明一個(gè)包含經(jīng)過(guò)轉(zhuǎn)換的坐標(biāo)和點(diǎn)的顏色#defineD3DFVF_CUSTOMVERTEX(D3DFVF_XYZRHW|D3DFVF_DIFFUSE)StructCUSTOMVERTEXFLOATx,y,z,rhw;/經(jīng)過(guò)坐標(biāo)轉(zhuǎn)換的頂點(diǎn)格式DWORDcolor;/頂點(diǎn)漫反射顏色值2.聲明一個(gè)頂點(diǎn)的詳細(xì)坐標(biāo),點(diǎn)的法向量坐標(biāo),紋理坐標(biāo)structCUSTOMVERTEXFLOATx,y,z;FLOATnx,ny,nz;FLOA

8、Ttu,tv;#defineD3DFVF_CUSTOMVERTEX(D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1);1、根據(jù)本人的需求定義點(diǎn)格式2、定義完點(diǎn)格式后,必需聲明該點(diǎn)格式3、定義頂點(diǎn)例如:1.圖形繪制1.3頂點(diǎn)的定義/聲明頂點(diǎn)位置和漫反射色數(shù)據(jù)。CUSTOMVERTEXg_Vertices=/xyzrhw漫反射色100.0f,100.0f,0.0f,1.0f,0 xffff0000,200.0f,100.0f,0.0f,1.0f,0 xff00ff00100.0f,200.0f,0.0f,1.0f,0 xff0000ff,200.0f,200.0f,0.0

9、f,1.0f,0 xffffffff,;1、二維圖形的繪制,假設(shè)以屏幕坐標(biāo)系定義,頂點(diǎn)的格式必需為D3DFVF_XYZRHW2、假設(shè)圖元為三角形,必需保證頂點(diǎn)的定義順序?yàn)轫槙r(shí)針。DX默許僅渲染順時(shí)針三角形3、假設(shè)運(yùn)用的三角形strip圖元,僅需保證第一個(gè)三角形為順時(shí)針即可。留意點(diǎn):1.3.1屏幕坐標(biāo)系定義頂點(diǎn)1.圖形繪制1.3頂點(diǎn)的定義1、相對(duì)坐標(biāo)系,以窗口的中心為原點(diǎn),X軸往右為正,Y軸往上為正,Z軸往里為正。不論窗口寬高,X軸范圍為-11,Y軸范圍為-11,Z軸范圍為01.1、二維圖形的繪制,假設(shè)以相對(duì)坐標(biāo)系定義,定義的格式必需為D3DFVF_XYZ留意點(diǎn):/聲明頂點(diǎn)位置和漫反射色數(shù)據(jù)。C

10、USTOMVERTEXg_Vertices=/xyz漫反射色-0.5f,0.5f,0.0f,0 xffff0000,0.5f,0.5f,0.0f,0 xff00ff00-0.5f,-0.5f,0.0f,0 xff0000ff,0.5f,-0.5f,0.0f,0 xffffffff,;1.3.2相對(duì)坐標(biāo)系定義頂點(diǎn)1.圖形繪制1.4圖形繪制g_pDevice-SetFVF(D3DFVF_CUSTOMVERTEX);g_pDevice-DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 3,數(shù)組首地址, sizeof(一個(gè)頂點(diǎn)字節(jié)數(shù));繪制函數(shù)之前一定要通知顯卡所繪制圖形的頂點(diǎn)格式

11、圖形渲染任務(wù)普通都是在函數(shù)BeginScene與EndScene之間完成。1.圖形繪制1.5頂點(diǎn)緩沖區(qū)頂點(diǎn)緩沖區(qū)VertexBuffer是Direct3D用來(lái)保管頂點(diǎn)數(shù)據(jù)的內(nèi)存緩沖區(qū)。頂點(diǎn)緩沖區(qū)可以設(shè)置在顯卡的顯存中、AGP內(nèi)存中或是在系統(tǒng)內(nèi)存中。假設(shè)指定緩沖區(qū)空間分配在顯存中,可以大大的提高渲染效率。HRESULTCreateVertexBuffer(UINTLength,/頂點(diǎn)緩沖區(qū)的大小,按字節(jié)數(shù)算DWORDUsage,/頂點(diǎn)緩沖區(qū)屬性DWORDFVF,/靈敏頂點(diǎn)格式D3DPOOLPool,/頂點(diǎn)緩沖區(qū)的內(nèi)存類型IDirect3DVertexBuffer9*ppVertexBuffer,

12、/頂點(diǎn)緩沖區(qū)指針地址HANDLE*pHandle/保管參數(shù),置為0);運(yùn)用函數(shù)CreateVertexBuffer創(chuàng)建一個(gè)頂點(diǎn)緩沖區(qū)用來(lái)保管矩陣頂點(diǎn)值。LPDIRECT3DVERTEXBUFFER9g_pVB=NULL;/要?jiǎng)?chuàng)建的頂點(diǎn)緩沖/其中參數(shù)D3DFVF_CUSTOMVERTEX指定的自定義頂點(diǎn)格式if(FAILED(g_pd3dDevice-CreateVertexBuffer(sizeof(Rectangle),0,D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT,&g_pVB,NULL)returnE_FAIL;1.圖形繪制1.5頂點(diǎn)緩沖區(qū)其中,參數(shù)U

13、sage用于指定頂點(diǎn)緩沖區(qū)的屬性,其取值可以設(shè)為0或下表中的恣意值的組合。緩沖區(qū)屬性說(shuō)明D3DUSAGE_DONOTCLIP禁用裁剪,表示頂點(diǎn)緩沖區(qū)中的頂點(diǎn)不進(jìn)行裁剪,當(dāng)設(shè)置該屬性時(shí),渲染狀態(tài)D3DRS_CLIPPING必須設(shè)為FALSED3DUSAGE_DYNAMIC使用動(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使用軟件進(jìn)行頂點(diǎn)運(yùn)算,否則使用硬件計(jì)算D3DUSAGE_WRITEONLY 只寫(xiě)屬

14、性,不能進(jìn)行讀操作,設(shè)置該屬性可以提高系統(tǒng)性能1.圖形繪制1.5頂點(diǎn)緩沖區(qū)參數(shù)Pool屬于枚舉類型D3DPOOL,指定頂點(diǎn)緩沖區(qū)資源的內(nèi)存位置。緩沖區(qū)資源內(nèi)存位置列表枚舉類型POOL值說(shuō)明D3DPOOL_DEFAULT默認(rèn)值,頂點(diǎn)緩沖區(qū)盡可能存在于顯存中D3DPOOL_MANAGED由Direct3D自動(dòng)調(diào)度頂點(diǎn)緩沖區(qū)內(nèi)存位置(顯存或內(nèi)存)D3DPOOL_SYSTEMMEM頂點(diǎn)緩沖區(qū)位于內(nèi)存中D3DPOOL_SCRATCH頂點(diǎn)緩沖區(qū)位于計(jì)算機(jī)的臨時(shí)內(nèi)存中,這種類型的頂點(diǎn)緩沖區(qū)不能直接進(jìn)行渲染,只能進(jìn)行內(nèi)存加鎖??截惖炔僮鱀3DPOOL_FORCE_DWORD強(qiáng)制編譯為32位,不使用1.圖形繪制

15、1.5頂點(diǎn)緩沖區(qū)保管頂點(diǎn)到頂點(diǎn)緩沖區(qū)需求把頂點(diǎn)的值存入頂點(diǎn)緩沖區(qū)之中,常用的方法是運(yùn)用函數(shù)Lock來(lái)獲取頂點(diǎn)緩沖區(qū)的首地址,并且鎖定該緩沖區(qū)域僅供當(dāng)前操作運(yùn)用。HRESULTIDirect3DVertexBuffer9:Lock(UINTOffsetToLock,/加鎖內(nèi)存起始地址UINTSizeToLock,/加鎖內(nèi)存大小VOID*ppbData,/前往內(nèi)存指針地址DWORDFlags/加鎖屬性);Lock函數(shù)執(zhí)行終了時(shí),必需運(yùn)用Unlock函數(shù)對(duì)緩沖區(qū)解鎖。VOID*pRectangle;if(FAILED(g_pVB-Lock(0,sizeof(Rectangle),(void*)&am

16、p;pRectangle,0)returnE_FAIL;memcpy(pRectangle,Rectangle,sizeof(Rectangle);g_pVB-Unlock();函數(shù)memcpy的功能是將創(chuàng)建好的頂點(diǎn)內(nèi)容復(fù)制到頂點(diǎn)緩沖區(qū)中。1.圖形繪制1.5頂點(diǎn)緩沖區(qū)設(shè)置資源流Direct3D中提供了函數(shù)SetStreamSource將設(shè)置好的頂點(diǎn)緩沖區(qū)對(duì)象綁定到數(shù)據(jù)流上:HRESULTSetStreamSource(UINTStreamNumber,/渲染數(shù)據(jù)流序號(hào)IDirect3DVertexBuffer9*pStreamData,/進(jìn)展綁定銜接的頂點(diǎn)緩沖區(qū)指針UINTOffsetInBy

17、tes,/進(jìn)展綁定銜接的渲染數(shù)據(jù)流的起始位置UINTStride/渲染數(shù)據(jù)流中一個(gè)頂點(diǎn)所占的內(nèi)存的大小);從頂點(diǎn)緩沖區(qū)繪制圖形繪制根本圖元Direct3D中運(yùn)用函數(shù)IDirect3DDevice9:DrawPrimitive完成繪制圖元。HRESULTDrawPrimitive(D3DPRIMITIVETYPEPrimitiveType,/根本圖元類型UINTStartVertex,/起始頂點(diǎn)UINTPrimitiveCount/繪制的圖元的數(shù)量);PrimitiveType指定繪制圖元的類型。StartVertex繪制圖元時(shí),運(yùn)用到頂點(diǎn)緩沖區(qū)中頂點(diǎn)的起始位置。PrimitiveCount繪制

18、圖元的數(shù)量。1.圖形繪制1.6索引緩沖區(qū)在實(shí)踐的圖形繪制中,除了運(yùn)用頂點(diǎn)緩沖繪制圖形外,還可以運(yùn)用索引緩沖來(lái)繪制幾何形體。索引緩沖是由用戶定義的,它為每個(gè)頂點(diǎn)建立索引值,通常用WORD或者DWORD數(shù)組來(lái)保管這些索引值,渲染圖形時(shí),程序按照頂點(diǎn)索引值的指定的頂點(diǎn)順序繪制圖元。運(yùn)用索引緩沖的意義運(yùn)用頂點(diǎn)緩沖繪制一個(gè)立方體時(shí),需求繪制立方體的6個(gè)面,假設(shè)運(yùn)用頂點(diǎn)緩沖繪制繪制由三角帶組成的立方體的外表,每一個(gè)面都需求4個(gè)頂點(diǎn),那么運(yùn)用頂點(diǎn)緩沖繪制立方體一共需求24個(gè)頂點(diǎn)信息。運(yùn)用索引緩沖繪制立方體同樣是三角帶組成的時(shí),只需求立方體的各頂點(diǎn)信息,即使用索引緩沖繪制立方體只需求8個(gè)頂點(diǎn)。1.圖形繪制1.

19、6索引緩沖區(qū)繪制一個(gè)立方體時(shí),這樣的內(nèi)存空間并不明顯,但是,當(dāng)需求渲染的三角形數(shù)量很大時(shí),運(yùn)用索引數(shù)組顯然可以節(jié)省大量的內(nèi)存空間。Direct3D渲染流水線也不用對(duì)一樣的頂點(diǎn)進(jìn)展反復(fù)計(jì)算,可以相應(yīng)的提高圖形程序的整體性能。運(yùn)用索引緩沖進(jìn)展繪制Direct3D支持經(jīng)過(guò)對(duì)應(yīng)于頂點(diǎn)數(shù)組的索引數(shù)組繪制三角形,它運(yùn)用索引緩沖區(qū)IndexBuffer和頂點(diǎn)緩沖區(qū)VertexBuffer協(xié)作進(jìn)展繪制。索引緩沖區(qū)就是用來(lái)存儲(chǔ)多邊形頂點(diǎn)索引的緩沖區(qū),它指向頂點(diǎn)緩沖區(qū)中的頂點(diǎn)位置。1.圖形繪制1.6索引緩沖區(qū)創(chuàng)建索引緩沖區(qū)函數(shù)IDirect3DDevice9:CreateIndexBuffer用于創(chuàng)建索引緩沖區(qū)。

20、HRESULTCreateIndexBuffer(UINTLength,/索引緩沖區(qū)大小,按字節(jié)數(shù)計(jì)算DWORDUsage,/索引緩沖區(qū)屬性,和頂點(diǎn)緩沖區(qū)一樣D3DFORMATFormat,/索引數(shù)組的元素格式,可以是16位或32位的格式D3DPOOLPool,/索引緩沖區(qū)內(nèi)存位置IDirect3DIndexBuffer9*ppIndexBuffer,/索引緩沖區(qū)指針地址HANDLE*pHandle/保管參數(shù),設(shè)為0);填充頂點(diǎn)緩沖區(qū)與保管索引值填充索引緩沖區(qū)的方法與填充頂點(diǎn)緩沖區(qū)的方法一樣。/填充索引緩沖區(qū)VOID*pIndices;if(FAILED(g_pIB-Lock(0,sizeof

21、(g_Indices),(void*)&pIndices,0)returnE_FAIL;memcpy(pIndices,g_Indices,sizeof(g_Indices);g_pIB-Unlock();1.圖形繪制1.6索引緩沖區(qū)頂點(diǎn)屬性設(shè)置運(yùn)用索引緩沖繪制圖形時(shí),同樣需求先設(shè)置靈敏頂點(diǎn)格式,并設(shè)置各個(gè)頂點(diǎn)的值,還需求定義每個(gè)頂點(diǎn)所對(duì)應(yīng)的索引數(shù)組的值。CUSTOMVERTEXg_Vertices=50.0f,50.0f,0.5f,1.0f,0 xffff0000,250.0f,250.0f,0.5f,1.0f,0 xff00ff00,50.0f,250.0f,0.5f,1.0f,0 xff00ffff,250.0f,50.0f,0.5f,1.0f,0 xffffffff,;/定義正方形4個(gè)頂點(diǎn)的索引WORDg_Indices=0,1,2,0,3,1;索引數(shù)組中的元素表表示義為:數(shù)組中第0,1,2個(gè)元素與第0,3,1個(gè)元素分別構(gòu)成2個(gè)三角形。1.圖形繪制1.6索引緩沖區(qū)圖形繪制運(yùn)用索引緩沖區(qū)繪制圖形也需求設(shè)置資源流。g_pd3dDevice-SetStreamSource(0,g_pVB,0,sizeof

溫馨提示

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