在Direct93D中Fog效果
在3D場景中增加FOG效果有利於增加場景的真實感,環境的氛圍,表現作者的心緒狀態,以及模糊的藝術感。Microsoft DirectX9支持兩種模式Fog效果:Pixel fog與Vertex fog,他們都有自己的特點與編程接口。
從本質上說,霧效果的產生是在渲染場景的過程中混合了場景中物體的顏色以及程序中提供的fog的顏色而成的,fog顏色在渲染過程中所佔的比例是與它在場景中的深度或者說距離視點的距離成正比的,也就是說離視點越遠(在場景中的深度越大)那麼fog的顏色在渲染過程中它所佔的比例也就越大。這樣就造成了現實中霧的效果的產生。
Direct3D提供兩種方式在一個場景中增加霧的效果:pixel fog 和 vertex fog。Pixel fog(也被稱爲table fog)是在設備驅動程序中完成的,而vertex fog在Direct3D的光線處理中完成的。
以上闡述了fog產生的大概原理,接下來我們描述一下pixel fog與vertex fog的編程實現:
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
一、 使用Pixel Fog
按照下面的步驟可以在程序中增加fog效果:
1、 通過設置D3DRS_FOGENABLE渲染狀態爲TRUE來啓動fog效果。
IDirect3Ddevice9::SetRenderState(D3DRS_FOGENABLE,TRUE);
2、 通過設置D3DRS_FOGCOLOR渲染狀態爲一整數值來設置我們希望的fog顏色
IDirect3Ddevice9::SetRenderState(D3DRS_FOGCOLOR,lFogColor);
3、 設置D3DRS_FOGTABLEMODE渲染狀態爲D3DFOGMODE的枚舉值之一來選擇
fog的規則。
IDirect3Ddevice9::tRenderState(D3DRS_FOGTABLEMODE,iMode);
4、 根據第三步中選擇的fog的方式的不同而設置fog的相應的參數值,這些參數值包括fog的起始與結束點,fog的濃度等信息。
如果iMode爲D3DFOG_LINEAR則設置fog的起始與終止點:
IDirect3Ddevice9::tRenderState(D3DRS_FOGSTART,nStartPos);
IDirect3Ddevice9::tRenderState(D3DRS_FOGEND,nEndPos);
否則則設置fog的濃度:
IDirect3Ddevice9::tRenderState(D3DRS_FOGDENSITY,nDensity);
下面的例子顯示了這些步驟:
}
}
二、 使用Vertex fog
Vertex fog的使用幾乎與Pixel Fog的使用完全相同,除了將第3步的D3DRS_FOGTABLEMODE變爲D3DRS_FOGVERTEXMODE外,其它的完全相同。
IDirect3Ddevice9::tRenderState(D3DRS_FOGVERTEXMODE,iMode);