明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

怎么在3D場景中加入Fog

[摘要]在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));
}