首页 | 社区 | 博客 | 招聘 | 文章 | 新闻 | 下载 | 读书 | 代码
亲,您未登录哦! 登录 | 注册

如何在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的公式模式有三种——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));
}

本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )

编程爱好者论坛

本栏最新文章

  • 利用Directshow开发源Filter
  • DShow中实现抓图的几种方法
  • 角色扮演游戏引擎的设计原理
  • 关于飞机射击类游戏的设计原理
  • 游戏引擎剖析(十一)
  • 游戏引擎剖析(十)
  • 游戏引擎剖析(九)
  • 游戏引擎剖析(八)
  • 游戏引擎剖析(七)
  • 游戏引擎剖析(六)
  • 游戏引擎剖析(五)
  • 游戏引擎剖析(四)
  • 游戏引擎剖析(三)
  • 游戏引擎剖析(二)
  • 游戏引擎剖析(一)
  • 渲染状态管理
  • 对2D游戏引擎设计的一些思考
  • 游戏引擎演化史
  • 网络游戏外挂编写初级教程
  • j2me游戏开发实例讲解