3d场景:如何在3D场景中加入Fog

    在3D场景中加入Fog(雾化效果)能增加真实感产生纵深感和距离感也可以用来营造气氛;或者使景物产生朦胧感觉Direct3D支持两种雾化模式——pixel fog 和 vertex fog

    Fog使用相当简单只需要设置好几个参数就可以

首先设置是否启用Fog效果:
    g_pDevice->SetRenderState(D3DRS_FOGENABLE, TRUE);
接着判断Fog颜色:
    g_pDevice->SetRenderState(D3DRS_FOGCOLOR, 0x0f0f0f);

然后判断要使用Fog公式模式Fog公式模式有 3种——D3DFOG_LINEAR 、D3DFOG_EXP、D3DFOG_EXP2

1.如果使用D3DFOG_LINEAR模式就要设置起用Fog深度开始值D3DRS_FOGSTART和结束值D3DRS_FOGEND
    pd3dDevice8->SetRenderState(D3DRS_FOGSTART, *((DWORD*) (&fFogStart)));
    pd3dDevice8->SetRenderState(D3DRS_FOGEND, *((DWORD*) (&fFogEnd)));

2.如果使用非D3DFOG_LINEAR模式就要设置Fog浓度
    g_pDevice->SetRenderState(D3DRS_FOGDENSITY, *(DWORD *)(&Density));

个人感觉Pixel Fog更容易实现和控制
下面给出个Pixel Fog例子

float Start = 0.5f, // For linear mode
End = 0.8f,
Density = 0.66; // For exponential modes
DWORD Mode = D3DFOG_EXP;//你也可尝试着设置 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.
(D3DFOG_LINEAR Mode)
{
    g_pDevice->SetRenderState(D3DRS_FOGTABLEMODE, Mode);
    g_pDevice->SetRenderState(D3DRS_FOGSTART, *(DWORD *)(&Start));
    g_pDevice->SetRenderState(D3DRS_FOGEND, *(DWORD *)(&End));
}

{
    g_pDevice->SetRenderState(D3DRS_FOGTABLEMODE, Mode);
    g_pDevice->SetRenderState(D3DRS_FOGDENSITY, *(DWORD *)(&Density));
}
Tags:  3d游戏场景 如何导入3d场景 3d场景模型 3d场景

延伸阅读

最新评论

发表评论