3D场景中加入Fog(雾化效果)能增加真实感,产生纵深感和距离感,也可以用来营造气氛;或者使景物产生朦胧的感觉。Direct3D支持两种雾化模式——pixel fog 和 vertex fog 。
Fog的使用相当简单。只需要设置好几个参数就可以。
首先设置是否启用Fog效果: g_pDevice->SetRenderState(D3DRS_FOGENABLE, TRUE); 接着判断Fog的颜色: g_pDevice->SetRenderState(D3DRS_FOGCOLOR, 0x0f0f0f);
然后判断要使用的Fog的公式模式,Fog的公式模式有三种——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. 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)); }
|