九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

清華大學DirectX游戲編程第6章(全20章)

上傳人:fgh****35 文檔編號:247446960 上傳時間:2024-10-18 格式:PPT 頁數(shù):20 大?。?86KB
收藏 版權申訴 舉報 下載
清華大學DirectX游戲編程第6章(全20章)_第1頁
第1頁 / 共20頁
清華大學DirectX游戲編程第6章(全20章)_第2頁
第2頁 / 共20頁
清華大學DirectX游戲編程第6章(全20章)_第3頁
第3頁 / 共20頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《清華大學DirectX游戲編程第6章(全20章)》由會員分享,可在線閱讀,更多相關《清華大學DirectX游戲編程第6章(全20章)(20頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級二級二級二級二級二級二級二級二級二級二級,第三級,第四級,第五級,*,第,6,章 光照,主要目標:,學習,Direct3D,提供的光源以及這些光源所發(fā)出的光的類型。,掌握定義光源的方法,以及光源如何作用于受光照影響的物體表面。,學習如何使用數(shù)學方法來描述三角形表面的方向,然后可以用于決定光線以哪種角度作用于三角形上。,2,6.1,光 的 組 成,在,Direct3D,的光照模型中,由光源發(fā)出的光主要有,3,種類型:,環(huán)境光,(Ambient Light),該類型的光將會被多個表面反射,常用于照亮整個場景。,散射光,(Diffuse Li

2、ght),該類型的光沿著特定方向傳播。,鏡面光,(,Specular,Light),該類型的光也沿著特定的方向傳播,當遇到物體表面時將沿著特定的方向進行反射,這樣在一定的角度上就可以看到一個高亮區(qū)域。,3,6.1,光 的 組 成,鏡面光比其他兩種類型的光需要更多的計算,因此,在,Direct3D,中提供關閉鏡面光的功能。實際上,在默認狀態(tài)下,鏡面光是關閉的,要使鏡面光起作用,需要設置,D3DRS_SPECULARENABLE,渲染狀態(tài):,Device-SetRenderState(D3DRS_SPECULARENABLE, true);,每種類型的光都可以使用,D3DCOLORVALUE,結構

3、或,D3DXCOLOR,來描述光的顏色,例如:,D3DXCOLOR redAmbient(1.0f, 0.0f, 0.0f, 1.0f);,D3DXCOLOR blueDiffuse(0.0f, 0.0f, 1.0f, 1.0f);,D3DXCOLOR whiteSpecular(1.0f, 1.0f, 1.0f, 1.0f);,4,6.2,材 質,材質被定義為物體表面對光的反射百分比。在代碼中,材質使用,D3DMATERIAL9,結構來表示:,typedef,struct,_D3DMATERIAL9 ,D3DCOLORVALUE Diffuse, Ambient,Specular, Emis

4、sive;,float Power;, D3DMATERIAL9;,5,6.2,材 質,觀察下面的示例,假設想得到紅球。那么定義球的材質只能反射紅光,其他顏色的光應該被吸收:,D3DMATERIAL9 red;,:,ZeroMemory(&red,sizeof(red,);,red.Diffuse,= D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f); / red,red.Ambient,= D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f); / red,red.Specular,= D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f); /

5、red,red.Emissive,= D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f); / no emission,red.Power,= 5.0f;,自己手動去設置材質結構是件煩人的事情,因此在,d3dutility.h/cpp,中定義了以下的實用函數(shù)和全局材質:,參見教材,P97,6,6.2,材 質,IDirect3DDevice9:SetMaterial(CONST D3DMATERIAL9 *,pMaterial,),函數(shù)用于指定當前材質。,使用不同的材質來渲染物體的程序如下:,D3DMATERIAL9,blueMaterial,redMaterial,;,./ s

6、et up material structures,Device-,SetMaterial(&blueMaterial,);,drawSphere,(); / blue sphere,Device-,SetMaterial(&redMaterial,);,drawSphere,(); / red sphere,7,6.3,頂 點 法 線,平面法線是用于描述多邊形朝向的向量,(,見圖,6.1),。,頂點法線和平面法線類似,但是不同之處在于每一個多邊形只有一個平面法線,而多邊形的每個頂點都擁有一個頂點法線,如圖,6.2,所示。,8,6.3,頂 點 法 線,注意頂點法線不一定和平面法線相同。球或者圓

7、就是一個很好的例子,在這兩個物體上頂點法線和所在三角形的法線不相同,(,見圖,6.3),。,要使頂點可以描述法線,必須更改頂點結構:,struct,Vertex,float _x, _y, _z;,float _,nx, _,ny, _,nz,;,static const DWORD FVF;,const DWORD,Vertex:FVF,= D3DFVF_XYZ | D3DFVF_NORMAL;,9,6.3,頂 點 法 線,下面是一個,C,函數(shù),用于通過三角形的三個頂點來計算平面法線:,void ComputeNormal(D3DXVECTOR3 *p0,D3DXVECTOR3 *p1,D3

8、DXVECTOR3 *p2,D3DXVECTOR3 *out),D3DXVECTOR3 u = *p1 - *p0;,D3DXVECTOR3 v = *p2 - *p0;,D3DXVec3Cross(out, ,D3DXVec3Normalize(out, out);,10,6.4,光 源,Direct3D,支持三類光源。,(1),點光源。光源處于世界空間中,并且向各個方向發(fā)射光線,如圖,6.4,所示。,(2),平行光。這種光源沒有固定的位置,但卻是在一個特定的方向上射出平行的光線,如圖,6.5,所示。,11,6.4,光 源,(3),聚光燈光源。該光源有點像手電筒,它有位置,光線沿著一個方向成

9、圓錐形散發(fā)。這個錐體的形狀通過用角度,(Theta),和,(phi),進行描述。,角用來描述內(nèi)部錐體的張角,,用來描述外部錐體的張角,如圖,6.6,所示。,12,6.4,光 源,在程序中光源通過,D3DLIGHT9,結構進行描述:,typedef,struct,_D3DLIGHT9 ,D3DLIGHTTYPE Type;,D3DCOLORVALUE Diffuse;,D3DCOLORVALUE,Specular,;,D3DCOLORVALUE Ambient;,D3DVECTOR Position;,D3DVECTOR Direction;,float Range;,float Falloff

10、;,float Attenuation0;,float Attenuation1;,float Attenuation2;,float Theta;,float Phi;, D3DLIGHT9;,13,6.4,光 源,在,d3dUtility.h/cpp,文件中添加下面的函數(shù)來初始化簡單光源:,namespace d3d,.,D3DLIGHT9 InitDirectionalLight(D3DXVECTOR3 *direction,D3DXCOLOR *color);,D3DLIGHT9 InitPointLight(D3DXVECTOR3 *position,D3DXCOLOR *color

11、);,D3DLIGHT9 InitSpotLight(D3DXVECTOR3 *position,D3DXVECTOR3 *direction,D3DXCOLOR *color);,14,6.4,光 源,初始化,D3DLIGHT9,對象之后,還需要在,Direct3D,管理的內(nèi)部光源列表中注冊該光源,程序如下:,Device-,SetLight,(,0, /,在光源列表中的元素,范圍是,0maxlights, / D3DLIGHT9,結構的地址,注冊完后,我們可以用下面的方法來開啟或關閉它:,Device-,LightEnable,(,0, /,要開關的元素,true); / true,表示打

12、開, false,表示關閉,15,6.5,示例:光照,本章的示例中創(chuàng)建了圖,6.7,中展示的場景,主要示范如何指定頂點法線、如何創(chuàng)建材質、如何創(chuàng)建和激活一個平行光源。,給場景加光照效果的步驟如下。,(1),激活光照模型。,(2),為每個物體創(chuàng)建材質,并且在渲染之前設置相應的材質。,(3),創(chuàng)建一個或者多個光源,設置光源并打開光源。,(4),打開其他的光照狀態(tài),比如鏡面高光。,16,6.5,示例:光照,例如,所有的三角形都共享了頂點,(0,,,1,,,0),,然而對于每個三角形來說這個點的法線的方向都是不同的。代碼如下:,參見教材,P105,在該例子中,金字塔反射白光,自身不發(fā)光,同時帶有一些高

13、光。代碼如下:,參見教材,P106,接下去將創(chuàng)建并打開一個平行光源 。,17,6.5,示例:光照,代碼如下:,D3DLIGHT9 dir;,:,ZeroMemory(&dir,sizeof(dir,);,dir.Type,= D3DLIGHT_DIRECTIONAL;,dir.Diffuse,= d3d:WHITE;,dir.Specular,= d3d:WHITE * 0.3f;,dir.Ambient,= d3d:WHITE * 0.6f;,dir.Direction,= D3DXVECTOR3(1.0f, 0.0f, 0.0f);,Device-SetLight(0, ,Device-L

14、ightEnable(0, true);,最后,設置渲染狀態(tài)重新計算法線方向,并打開鏡面光:,Device-SetRenderState(D3DRS_NORMALIZENORMALS, true);,Device-SetRenderState(D3DRS_SPECULARENABLE, true);,/ .,省略了設置視圖和投影矩陣,return true;,18,6.6,其 他 例 子,圖,6.8,是平行光例子的屏幕截圖。,19,6.7,小 結,Direct3D,支持三種類型的光源模型,平行光源、點光源和聚光燈光源。光源發(fā)出三種類型的光,環(huán)境光、散射光和鏡面光。,材質定義光和物體表面之間的關系。,頂點法線用于定義頂點的方位。,Direct3D,根據(jù)頂點法線來決定光線照射到頂點的角度。在一些情況下,可以認為頂點法線和由頂點構成的三角形的平面法線相同,但是在需要模擬光滑表面的物體中這種方法并不常用。,20,

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!