怎么在3D場景中加入Fog
發(fā)表時(shí)間:2023-08-22 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在3D場景中加入Fog(霧化效果)能增加真實(shí)感,產(chǎn)生縱深感和距離感,也可以用來營造氣氛;或者使景物產(chǎn)生朦朧的感覺。Direct3D支持兩種霧化模式——pixel fog 和 vertex fog 。...
在3D場景中加入Fog(霧化效果)能增加真實(shí)感,產(chǎn)生縱深感和距離感,也可以用來營造氣氛;或者使景物產(chǎn)生朦朧的感覺。Direct3D支持兩種霧化模式——pixel fog 和 vertex fog 。
Fog的使用相當(dāng)簡單。只需要設(shè)置好幾個(gè)參數(shù)就可以。
首先設(shè)置是否啟用Fog效果:
g_pDevice->SetRenderState(D3DRS_FOGENABLE, TRUE);
接著判斷Fog的顏色:
g_pDevice->SetRenderState(D3DRS_FOGCOLOR, 0x0f0f0f);
然后判斷要使用的Fog的公式模式,F(xiàn)og的公式模式有三種——D3DFOG_LINEAR 、D3DFOG_EXP、D3DFOG_EXP2
1.如果使用D3DFOG_LINEAR模式,就要設(shè)置起用Fog的深度的開始值D3DRS_FOGSTART和結(jié)束值D3DRS_FOGEND
pd3dDevice8->SetRenderState(D3DRS_FOGSTART, *((DWORD*) (&fFogStart)));
pd3dDevice8->SetRenderState(D3DRS_FOGEND, *((DWORD*) (&fFogEnd)));
2.如果使用非D3DFOG_LINEAR模式,就要設(shè)置Fog的濃度
g_pDevice->SetRenderState(D3DRS_FOGDENSITY, *(DWORD *)(&Density));
個(gè)人感覺Pixel Fog更容易實(shí)現(xiàn)和控制一些
下面給出一個(gè)Pixel Fog的例子
float Start = 0.5f, // For linear mode
End = 0.8f,
Density = 0.66; // For exponential modes
DWORD Mode = D3DFOG_EXP;//你也可嘗試著設(shè)置 Mode = D3DFOG_LINEAR;
// Enable fog blending.
g_pDevice->SetRenderState(D3DRS_FOGENABLE, TRUE);
// Set the fog color.
g_pDevice->SetRenderState(D3DRS_FOGCOLOR, 0x0f0fff);
// Set fog parameters.
if(D3DFOG_LINEAR == Mode)
{
g_pDevice->SetRenderState(D3DRS_FOGTABLEMODE, Mode);
g_pDevice->SetRenderState(D3DRS_FOGSTART, *(DWORD *)(&Start));
g_pDevice->SetRenderState(D3DRS_FOGEND, *(DWORD *)(&End));
}
else
{
g_pDevice->SetRenderState(D3DRS_FOGTABLEMODE, Mode);
g_pDevice->SetRenderState(D3DRS_FOGDENSITY, *(DWORD *)(&Density));
}