在Direct93D中Fog效果

原创 2003年01月23日 09:46:00

Direct93DFog效果

 

3D场景中增加FOG效果有利于增加场景的真实感,环境的氛围,表现作者的心绪状态,以及模糊的艺术感。Microsoft DirectX9支持两种模式Fog效果:Pixel fogVertex fog,他们都有自己的特点与编程接口。

从本质上说,雾效果的产生是在渲染场景的过程中混合了场景中物体的颜色以及程序中提供的fog的颜色而成的,fog颜色在渲染过程中所占的比例是与它在场景中的深度或者说距离视点的距离成正比的,也就是说离视点越远(在场景中的深度越大)那么fog的颜色在渲染过程中它所占的比例也就越大。这样就造成了现实中雾的效果的产生。

Direct3D提供两种方式在一个场景中增加雾的效果:pixel fog vertex fogPixel fog(也被称为table fog)是在设备驱动程序中完成的,而vertex fogDirect3D的光线处理中完成的。

 以上阐述了fog产生的大概原理,接下来我们描述一下pixel fogvertex fog的编程实现:

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

一、             使用Pixel Fog

  按照下面的步骤可以在程序中增加fog效果:

1、  通过设置D3DRS_FOGENABLE渲染状态为TRUE来启动fog效果。

   IDirect3Ddevice9::SetRenderState(D3DRS_FOGENABLE,TRUE);

2、  通过设置D3DRS_FOGCOLOR渲染状态为一整数值来设置我们希望的fog颜色

IDirect3Ddevice9::SetRenderState(D3DRS_FOGCOLOR,lFogColor);

3、  设置D3DRS_FOGTABLEMODE渲染状态为D3DFOGMODE的枚举值之一来选择

fog的规则。

IDirect3Ddevice9::tRenderState(D3DRS_FOGTABLEMODE,iMode);

4、  根据第三步中选择的fog的方式的不同而设置fog的相应的参数值,这些参数值包括fog的起始与结束点,fog的浓度等信息。

如果iModeD3DFOG_LINEAR则设置fog的起始与终止点:

          IDirect3Ddevice9::tRenderState(D3DRS_FOGSTART,nStartPos);

          IDirect3Ddevice9::tRenderState(D3DRS_FOGEND,nEndPos);

否则则设置fog的浓度:

   IDirect3Ddevice9::tRenderState(D3DRS_FOGDENSITYnDensity);

下面的例子显示了这些步骤:

}

}

 

 

二、             使用Vertex fog

Vertex fog的使用几乎与Pixel Fog的使用完全相同,除了将第3步的D3DRS_FOGTABLEMODE变为D3DRS_FOGVERTEXMODE外,其它的完全相同。

IDirect3Ddevice9::tRenderState(D3DRS_FOGVERTEXMODE,iMode);

 

【Unity Shaders】Unity里的雾效模拟

写在前面熟悉Unity的都知道,Unity可以进行基本的雾效模拟。所谓雾效,就是在远离我们视角的方向上,物体看起来像被蒙上了某种颜色(通常是灰色)。这种技术的实现实际上非常简单,就是根据物体距离摄像机...
  • candycat1992
  • candycat1992
  • 2014年11月29日 15:25
  • 27196

OpenGL: 雾化效果

#include #pragma comment(lib, "glut32.lib") #define MODE_NONE 0 #define MODE_LINEAR 1 #define MODE...
  • Augusdi
  • Augusdi
  • 2014年03月04日 23:38
  • 3888

【Unity3D Shader编程】之八 Unity5新版Shader模板源码解析&径向模糊屏幕特效的实现

概要:本文对Unity5中全新的三种Shader模板的源码进行了解析,然后还讲解了运动模糊屏幕特效的实现方法。 Unity5和之前的书写模式有了一定的改变。Unity5时代的Shader Refere...
  • zhmxy555
  • zhmxy555
  • 2015年10月25日 20:26
  • 28750

Direct93D游戏程序设计入门-学习总结

  • 2013年06月04日 19:50
  • 5.65MB
  • 下载

Direct3D引擎舞台灯光效果

  • 2013年02月21日 00:54
  • 2.14MB
  • 下载

direct3d9做的水纹效果

  • 2011年02月14日 15:37
  • 627KB
  • 下载

用Direct3D设计淡入淡出的效果(演示程序)

  • 2012年03月20日 14:44
  • 151KB
  • 下载

用Direct3D设计层峦叠嶂的效果(演示程序)

  • 2012年04月07日 19:12
  • 109KB
  • 下载

Direct3D进行Alpha混合实现半透明效果(演示程序)

  • 2012年02月26日 13:56
  • 440KB
  • 下载

Direct3D提高篇:HLSL编程实现PhotoShop滤镜效果

一、图像黑白化 一个RGB颜色的亮度和各个分量之间的关系的公式为:        GrayValue = 0.3 * R + 0.59*G  + 0.11 *B 根据这个公式,代码如下:...
  • Game_jqd
  • Game_jqd
  • 2015年01月26日 11:05
  • 561
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Direct93D中Fog效果
举报原因:
原因补充:

(最多只允许输入30个字)