D3D中的雾

在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的例子

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));
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值