![繪制帶有紋理的立方體_第1頁](http://file4.renrendoc.com/view/1ecf1c3e99ef0b2b304cb59869c3f7e3/1ecf1c3e99ef0b2b304cb59869c3f7e31.gif)
![繪制帶有紋理的立方體_第2頁](http://file4.renrendoc.com/view/1ecf1c3e99ef0b2b304cb59869c3f7e3/1ecf1c3e99ef0b2b304cb59869c3f7e32.gif)
![繪制帶有紋理的立方體_第3頁](http://file4.renrendoc.com/view/1ecf1c3e99ef0b2b304cb59869c3f7e3/1ecf1c3e99ef0b2b304cb59869c3f7e33.gif)
![繪制帶有紋理的立方體_第4頁](http://file4.renrendoc.com/view/1ecf1c3e99ef0b2b304cb59869c3f7e3/1ecf1c3e99ef0b2b304cb59869c3f7e34.gif)
![繪制帶有紋理的立方體_第5頁](http://file4.renrendoc.com/view/1ecf1c3e99ef0b2b304cb59869c3f7e3/1ecf1c3e99ef0b2b304cb59869c3f7e35.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
繪制帶有紋理的立方體第1頁,共51頁,2023年,2月20日,星期四拋磚引玉Copyright2008ByNeusoftGroup.Allrightsreserved第2頁,共51頁,2023年,2月20日,星期四拋磚引玉Copyright2008ByNeusoftGroup.Allrightsreserved第3頁,共51頁,2023年,2月20日,星期四專題3繪制帶有紋理的立方體學習目標:1.掌握如何設置光源,控制光照2.理解物體材質(zhì)作用及如何進行材質(zhì)的設置3.熟悉如何對簡單幾何物體實現(xiàn)紋理帖圖4.掌握如何實現(xiàn)多重紋理Copyright2008ByNeusoftGroup.Allrightsreserved第4頁,共51頁,2023年,2月20日,星期四Copyright2008ByNeusoftGroup.Allrightsreserved光照與材質(zhì)基本紋理繪制特殊紋理渲染專題授課要點第5頁,共51頁,2023年,2月20日,星期四燈光的組成在Direct3D燈光模型中,燈光是通過燈光模型的三個成員之一來照射的-----------即有三種燈光.①環(huán)境光(AmbientLight):是經(jīng)其他表面反射到達物體表面,并照亮整個場景。這時物體并不處于光源的直接照射下,照亮物體的光是其他物體反射到該物體上的光線。光線經(jīng)過多次折射后看起來就像是來自四面八方一樣,這種光不依賴于光源的位置。Copyright2008ByNeusoftGroup.Allrightsreserved第6頁,共51頁,2023年,2月20日,星期四燈光的組成
②漫射光(DiffuseLight):有特定的傳播方向,但當它到達某一表面時,將沿著各個方向均勻反射。這種光無論從哪個方位觀察,表面亮度均相同,所以無須考慮觀察者的位置,僅需考慮光傳播的方向以及表面的朝向。從一個光源發(fā)出的光一般都是這種類型的。Copyright2008ByNeusoftGroup.Allrightsreserved粗糙表面上每一個小區(qū)域內(nèi)都有大量的朝各個方向的小的表面,因此光線是朝向任意方向均勻反射出去的。第7頁,共51頁,2023年,2月20日,星期四燈光的組成
③鏡面光(SpecularLight):用于顯示物體表面(光滑和光澤表面)的高光效果,有特定的傳播方向。但當它到達一個表面時,將嚴格的沿著另一個方向反射。是只能在一定的角度范圍內(nèi)才能觀察到的高亮度照射。因為光照均沿著同一個方向反射,所以不僅要考慮光的入射方向和表面的朝向,還需要考慮觀察者的位置。Copyright2008ByNeusoftGroup.Allrightsreserved第8頁,共51頁,2023年,2月20日,星期四燈光的組成小結(jié)
鏡面反射光與其他類型的光相比,計算量要大很多,所以Direct3D為其提供了開關選項,默認狀態(tài)下,Direct3D不進行鏡面反射計算??刹捎孟旅娴姆椒▎⒂茫篠etRenderState(D3DRS_SPECULARENABLE,true);
Copyright2008ByNeusoftGroup.Allrightsreserved第9頁,共51頁,2023年,2月20日,星期四燈光的組成小結(jié)每種類型的光都是通過D3DCOLORVALUE結(jié)構(gòu)或者D3DXCOLOR來描繪,表示光照的顏色。
D3DXCOLORredAmbient(1.0f,0.0f,0.0f,1.0f);D3DXCOLORblueDiffuse(0.0f,0.0f,1.0f,1.0f);D3DXCOLORwhiteSpecular(1.0f,1.0f,1.0f,1.0f);
注意:1、在D3DXCOLOR類中的alpha值用在描述光線顏色時是被忽略的。Copyright2008ByNeusoftGroup.Allrightsreserved第10頁,共51頁,2023年,2月20日,星期四材質(zhì)的概念在現(xiàn)實世界中,我們所觀察到的物體的顏色是由該物體所反射的光的顏色決定的。如:一個純紅色的球體反射了全部的紅色入射光,并吸收了所有非紅色的光,所以該球體呈現(xiàn)為紅色。在Direct3D中,通過定義物體的材質(zhì)(materials)來模擬這樣的現(xiàn)象。材質(zhì)允許我們定義物體表面對各種顏色光的反射比例。Copyright2008ByNeusoftGroup.Allrightsreserved第11頁,共51頁,2023年,2月20日,星期四材質(zhì)材質(zhì)結(jié)構(gòu)體D3DMATERIAL9的定義:Copyright2008ByNeusoftGroup.Allrightsreserved
typedefstructD3DMATERIAL9{D3DCOLORVALUEDiffuse;//指定表面對漫射光的反射率D3DCOLORVALUEAmbient;//指定表面對環(huán)境光的反射率D3DCOLORVALUESpecular;//指定表面對鏡面光的反射率D3DCOLORVALUEEmissive;//指定物體的自發(fā)光亮度floatPower;//指定鏡面高光點的銳度(sharpness)}D3DMATERIAL9,*LPD3DMATERIAL9;
第12頁,共51頁,2023年,2月20日,星期四材質(zhì)問題:得到一個紅色的球。思路:定義球的材質(zhì)為只反射紅光而吸收所有其他顏色的光:
Copyright2008ByNeusoftGroup.AllrightsreservedD3DMATERIAL9red;::ZeroMemory(&red,sizeof(red));red.Diffuse=D3DXCOLOR(1.0f,0.0f,0.0f,1.0f);//紅色red.Ambient=D3DXCOLOR(1.0f,0.0f,0.0f,1.0f);//紅色red.Specular=D3DXCOLOR(1.0f,0.0f,0.0f,1.0f);//紅色red.Emissive=D3DXCOLOR(0.0f,0.0f,0.0f,1.0f);
//無自發(fā)光red.Power=5.0f;第13頁,共51頁,2023年,2月20日,星期四材質(zhì)的實現(xiàn)方法總結(jié)第1步:設置物體的反光性,即分別設置物體對環(huán)境光、漫射光、鏡面反射光的反射性.以及物體本身的發(fā)光性,物體的反射系數(shù).第2步:Direct3D設備接口調(diào)用SetMaterial函數(shù)實現(xiàn)對物體材質(zhì)的設置.Copyright2008ByNeusoftGroup.Allrightsreserved第14頁,共51頁,2023年,2月20日,星期四效果展示1.點光源Copyright2008ByNeusoftGroup.Allrightsreserved第15頁,共51頁,2023年,2月20日,星期四效果展示2.方向光Copyright2008ByNeusoftGroup.Allrightsreserved第16頁,共51頁,2023年,2月20日,星期四效果展示3.聚光燈Copyright2008ByNeusoftGroup.Allrightsreserved第17頁,共51頁,2023年,2月20日,星期四結(jié)果分析1.第1幅中有高亮2.第2幅中光均勻分布3.第3幅中有未接受到光部分Copyright2008ByNeusoftGroup.Allrightsreserved第18頁,共51頁,2023年,2月20日,星期四光源Direct3D支持3種類型的光源:點光源(Pointlights):處于世界坐標系中固有的位置,向所有的方向發(fā)射光線。Copyright2008ByNeusoftGroup.Allrightsreserved光線的作用范圍半徑沿光線方向,光強度逐漸衰減第19頁,共51頁,2023年,2月20日,星期四光源方向光(Directionallights):沒有位置信息,所發(fā)射的光線相互平行地沿某一特定方向傳播。Copyright2008ByNeusoftGroup.Allrightsreserved光強不隨距離而衰減第20頁,共51頁,2023年,2月20日,星期四光源聚光燈(Spotlights):與手電筒類似,有位置信息,發(fā)出的光在特定方向上按照圓錐形照射。該錐形可用兩個角度:和來描述。角描述了內(nèi)部錐形,描述了外部錐形。Copyright2008ByNeusoftGroup.AllrightsreservedAttenuation衰減第21頁,共51頁,2023年,2月20日,星期四光源的設置1.點光源的設置點光源的特點:光線來源于一固定點設定點光源時應該設置光源位置與光源2.方向光的設置方向光的特點:沒有位置信息,平行地沿某一特定方向傳播設定方向光時應該設置方向與光源3.聚光燈的設置聚光燈的特點:有位置信息,發(fā)出的光在特定方向上按照圓錐形照射。設定聚光燈時應該設置光源位置光源方向與光源Copyright2008ByNeusoftGroup.Allrightsreserved第22頁,共51頁,2023年,2月20日,星期四常見問題光照計算是對每個頂點進行的,所以Direct3D需要知道表面在每個頂點處的局部朝向(法線方向),從而確定光線到達表面時候的入射角.Copyright2008ByNeusoftGroup.Allrightsreserved頂點法線和面法線是不相同面法線頂點法線第23頁,共51頁,2023年,2月20日,星期四頂點的法向量的計算思路:⑴已知三角形的三個頂點坐標P0,P1,P2,求三角形面的法向量。Copyright2008ByNeusoftGroup.AllrightsreservednP2P0P1P1-P0=uP2-P0=v則可以得到面法線為:n=u×v第24頁,共51頁,2023年,2月20日,星期四頂點的法向量的計算Copyright2008ByNeusoftGroup.AllrightsreservedvoidComputeNormal(D3DXVECTOR3*p0, D3DXVECTOR3*p1, D3DXVECTOR3*p2, D3DXVECTOR3*out){ D3DXVECTOR3u=*p1-*p0; D3DXVECTOR3v=*p2-*p0; D3DXVec3Cross(out,&u,&v); D3DXVec3Normalize(out,out);}下面的函數(shù)通過三角形的三個頂點計算三角形的面法線。注意這個函數(shù)的三個頂點是按照順時針方向指定的。第25頁,共51頁,2023年,2月20日,星期四頂點的法向量的計算Copyright2008ByNeusoftGroup.Allrightsreserved⑵求出共享頂點P0的所有平面的法向量,取其和。
n=n1+n2+…+nt(共t個面共享P0)
⑶規(guī)范化頂點的法向量。
SetRenderState(D3DRS_NORMALIZENORMALS,true);第26頁,共51頁,2023年,2月20日,星期四注意Copyright2008ByNeusoftGroup.Allrightsreserved我們在定義頂點結(jié)構(gòu)體的時候,如果需要用到頂點的法線信息,就在結(jié)構(gòu)體中定義相應的數(shù)據(jù)成員。
structVertex{ ……
float_x,_y,_z;
float_nx,_ny,_nz;}#defineD3DFVF_CUSTOMVERTEX(D3DFVF_XYZ|D3DFVF_NORMAL)注意:在這里不需要表示頂點的顏色了,頂點的顏色是由光照和材質(zhì)來計算出來的,所以我們需要在這里加上頂點的法向量成員。第27頁,共51頁,2023年,2月20日,星期四實例:用聚光燈照射一個立方體Copyright2008ByNeusoftGroup.Allrightsreserved步驟:1.創(chuàng)建立方體2.設置立方體的材質(zhì)3.設置聚光燈第28頁,共51頁,2023年,2月20日,星期四實例:用聚光燈照射一個立方體Copyright2008ByNeusoftGroup.Allrightsreserved步驟:1.創(chuàng)建立方體(略)2.設置立方體的材質(zhì)第1步:封裝設置材質(zhì)的函數(shù)D3DMATERIAL9InitMtrl(D3DXCOLORa,D3DXCOLORd,D3DXCOLORs,D3DXCOLORe,floatp){ D3DMATERIAL9mtrl; mtrl.Ambient=a; mtrl.Diffuse=d; mtrl.Specular=s; mtrl.Emissive=e; mtrl.Power=p; returnmtrl;}第2步:設置立方體材質(zhì)D3DMATERIAL9
matrl=InitMtrl(D3DCOLOR_XRGB(255,0,0),D3DCOLOR_XRGB(255,0,0),D3DCOLOR_XRGB(255,0,0),D3DCOLOR_XRGB(0,0,0),2.0f);第29頁,共51頁,2023年,2月20日,星期四實例:用聚光燈照射一個立方體Copyright2008ByNeusoftGroup.Allrightsreserved步驟:3.設置聚光燈第1步:設置聚光燈的位置D3DXVECTOR3position(0.0f,0.0f,-5.0f);第2步:設置聚光燈的照射的方向D3DXVECTOR3dir(0.0f,0.0f,1.0f);第3步:設置聚光燈的光源D3DXCOLORc=D3DCOLOR_XRGB(255,255,255);第30頁,共51頁,2023年,2月20日,星期四實例:用聚光燈照射一個立方體Copyright2008ByNeusoftGroup.Allrightsreserved步驟:第4步:封裝初始化聚光燈函數(shù):D3DLIGHT9InitSpotLight(D3DXVECTOR3*position,D3DXVECTOR3*direction,D3DXCOLOR*color){ D3DLIGHT9light; ::ZeroMemory(&light,sizeof(light)); light.Type=D3DLIGHT_SPOT; light.Ambient=*color*0.0f; light.Diffuse=*color; light.Specular=*color*0.6f; light.Position=*position; light.Direction=*direction; light.Range=1000.0f; light.Falloff=1.0f; light.Attenuation0=1.0f; light.Attenuation1=0.0f; light.Attenuation2=0.0f; light.Theta=0.4f; light.Phi=0.9f; returnlight;}第31頁,共51頁,2023年,2月20日,星期四注意Copyright2008ByNeusoftGroup.Allrightsreserved完成后需要在繪制的時候調(diào)用SetMaterial函數(shù)將前面設置材質(zhì)信息導入.需要打開光照.
g_pD3DDevice->SetLight(0,&Spot); g_pD3DDevice->LightEnable(0,true);第32頁,共51頁,2023年,2月20日,星期四課堂練習Copyright2008ByNeusoftGroup.Allrightsreserved實現(xiàn)利用點光源照射一個幾何體(注意點光源需要哪些)第33頁,共51頁,2023年,2月20日,星期四課后作業(yè)Copyright2008ByNeusoftGroup.Allrightsreserved實現(xiàn)利用方向光源照射一個物體(幾何體形狀自己設計)第34頁,共51頁,2023年,2月20日,星期四紋理所謂紋理,就是一張用來表示物體表面細節(jié)的二維位圖.Copyright2008ByNeusoftGroup.Allrightsreserved第35頁,共51頁,2023年,2月20日,星期四紋理坐標Direct3D中,紋理坐標系(紋理空間)由水平方向的u軸和沿垂直方向的v軸構(gòu)成。由(u,v)坐標對決定紋理上的元素,它被叫做texel(紋理元/紋素)。Direct3D將紋理坐標進行了規(guī)范化處理,以處理不同尺寸的紋理,將紋理坐標的范圍都限制在[0,1]以內(nèi)。Copyright2008ByNeusoftGroup.Allrightsreserved第36頁,共51頁,2023年,2月20日,星期四紋理繪制步驟第1步:創(chuàng)建并啟用紋理.通常使用D3DXCreateTextureFromFile或者D3DXCreateTextureFromFileEx函數(shù)來實現(xiàn).Copyright2008ByNeusoftGroup.Allrightsreserved第37頁,共51頁,2023年,2月20日,星期四紋理繪制步驟第2步:設定紋理過濾器.Direct3D提供了三種不同的過濾器;每種都提供了一個不同的品質(zhì)級別。越好的品質(zhì)越慢,因此你必須在品質(zhì)與速度之間取得一個平衡。紋理過濾器是用IDirect3DDevice9::SetSamplerState方法來設置的。Copyright2008ByNeusoftGroup.AllrightsreservedHRESULTSetSamplerState(DWORDSampler,//取樣階段索引D3DSAMPLERSTATETYPEType,//取樣狀態(tài)類型DWORDValue//取樣值,由type決定);
第38頁,共51頁,2023年,2月20日,星期四紋理繪制步驟第3步:設置當前紋理.使用SetTexture方法:
Copyright2008ByNeusoftGroup.AllrightsreservedHRESULTIDirect3DDevice9::SetTexture(DWORDStage,//0-7的值用于標識紋理等級,現(xiàn)在我們?nèi)?IDirect3DBaseTexture9*pTexture//要設置紋理的指針);第39頁,共51頁,2023年,2月20日,星期四注意我們在定義頂點結(jié)構(gòu)體的時候,如果需要實現(xiàn)紋理映射,就在結(jié)構(gòu)體中定義相應的數(shù)據(jù)成員。Copyright2008ByNeusoftGroup.AllrightsreservedstructVertex{
……
float_x,_y,_z;
float_nx,_ny,_nz;
float_u,_v;//紋理坐標
static
constDWORDFVF;};constDWORDVertex::FVF=D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1;注:在靈活頂點標記處增加了一個D3DFVF_TEX1(1—8)的標記,表示頂點結(jié)構(gòu)中包含了一對紋理坐標。這樣,我們在定義構(gòu)成三角形的三個頂點時候,在紋理坐標系中也定義了一個相應的紋理三角形。紋理映射是在光柵化階段進行的。第40頁,共51頁,2023年,2月20日,星期四關鍵程序代碼Copyright2008ByNeusoftGroup.Allrightsreserved第1步:創(chuàng)建紋理并導入D3DXCreateTextureFromFile(g_pD3DDevice,"1.jpg",&Tex);第2步:設定紋理過濾器g_pD3DDevice->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);g_pD3DDevice->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);g_pD3DDevice->SetSamplerState(0,D3DSAMP_MIPFILTER,D3DTEXF_POINT);第3步:設置當前紋理g_pD3DDevice->SetTexture(0,Tex);第41頁,共51頁,2023年,2月20日,星期四實例:為一個立方體貼紋理Copyright2008ByNeusoftGroup.Allrightsreserved實現(xiàn)如下效果:第42頁,共51頁,2023年,2月20日,星期四多重紋理(Multitexturing)多次渲染:分多次將多張紋理映射到同一個多邊形上。多重紋理:將多張紋理在一次渲染中映射到同一個多邊形上。多重紋理比多次渲染更快一些,但是它需要顯卡的支持。多重紋理只渲染一次,而在渲染之前通過調(diào)用SetTexture和SetTextureStageState函數(shù)來對不同的紋理進行混合,這個過程就叫做紋理混合(textureblending)。每個紋理階段的結(jié)果都會傳遞到下一個階段,最后一個階段的結(jié)果被光柵化到多邊形上。Copyright2008ByNeusoftGroup.Allrightsreserved第43頁,共51頁,2023年,2月20日,星期四多重紋理的設置對每個頂點使用兩組紋理坐標,第一張紋理使用第一組紋理坐標,第二張紋理使用第二組紋理坐標。Device->SetTexture(0,tex0);Device->SetTextureStageState(0,D3DTSS_TEXCOORDINDEX,0);
……Device->SetTexture(1,tex1);Device->SetTextureStageState(1,D3DTSS_TEXCOORDINDEX,1);
……當然,也可以重復使用一組紋理坐標:Device->SetTexture(0,tex0);Device->SetTextureStageState(0,D3DTSS_TEXCOORDINDEX,0);
……Device->SetTexture(1,tex1);Device->SetTextureStageState(1,D3DTSS_TEXCOORDINDEX,0);Copyright2008ByNeusoftGroup.Allrightsreserved第44頁,共51頁,2023年,2月20日,星期四多重紋理的應用實例黑暗映射(DarkMapping)將兩張紋理的顏色相乘。這種類型的多重紋理之所以稱為“黑暗映射”是因為最終結(jié)果中未受到光照的圖素比原圖中的圖素更暗。Copyright2008ByNeusoftGroup.Allrightsreserved第45頁,共51頁,2023年,2月20日,星期四實現(xiàn)代碼設置發(fā)光映射:
g_pD3DDevice->SetTexture(0,m_pTexture1);
g_pD3DDevice->SetTextureStageState(0,D3DTSS_TEXCOORDINDEX,0);
g_pD3DDevice->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
g_pD3DDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);//使用當前顏色作為第一個texturestage
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度建筑廢棄物處理與地勘施工一體化合同
- 2025年度新能源電池制造企業(yè)股權(quán)轉(zhuǎn)讓協(xié)議
- 2025年中國度洛西汀行業(yè)市場運營現(xiàn)狀及投資研究建議報告
- 2025年度新材料研發(fā)股權(quán)轉(zhuǎn)讓補償協(xié)議示范文本
- 2025年度旅游產(chǎn)業(yè)項目借款協(xié)議
- 2024-2029全球及中國離岸直升機行業(yè)市場調(diào)研及投資前景分析報告
- 班主任讓寫退學申請書
- 2025年清水水泵行業(yè)深度研究分析報告
- 2025年醒久寶項目投資可行性研究分析報告
- 加入志愿者申請書
- 項目獎金分配獎勵制度和方案完整版
- 上海中學國際部幼升小面試真題
- 贏在團隊執(zhí)行力課件
- 慢性胰腺炎課件
- 北京理工大學應用光學課件第四章
- 陰道鏡幻燈課件
- PCB行業(yè)安全生產(chǎn)常見隱患及防范措施課件
- DB32∕T 186-2015 建筑消防設施檢測技術規(guī)程
- 2022年福建泉州中考英語真題【含答案】
- 汽車座椅骨架的焊接夾具畢業(yè)設計說明書(共23頁)
- 露天礦山職業(yè)危害預先危險分析表
評論
0/150
提交評論