您的位置:首页 > 其它

OGL浅学_雾效果

2016-02-05 10:25 225 查看
所谓雾效果,就是使远处的物体看上去逐渐变得模糊。雾在本质上是一种视觉模拟应用,用于模拟有线可视性的场合。

当雾启用后,远离观察点的物体开始融入到雾颜色中。可以控制雾的浓度,它决定了物体随着距离的增加而融入到雾颜色的速度,另外还可以设置雾的颜色。下面先看一张雾的效果图:



在大型的模拟程序中,雾可以提高性能,因为它可以选择不绘制那些因为雾的影响而不可见的物体。下面我们来看一下雾的使用:

glEnable(GL_FOG);

{

GLfloat fogColor[4] = {0.5, 0.5, 0.5, 1.0};

fogMode = GL_EXP;

glFogi (GL_FOG_MODE, fogMode);

glFogfv (GL_FOG_COLOR, fogColor);

glFogf (GL_FOG_DENSITY, 0.35);

glHint (GL_FOG_HINT, GL_DONT_CARE);

glFogf (GL_FOG_START, 1.0);

glFogf (GL_FOG_END, 5.0);

}


首先是启用雾效果,然后用glFog*()来控制雾浓度的方程式:

1、设置雾的模式GL_FOG_MODE,有GL_Liner、GL_EXP、GL_EXP2...雾的模式决定了雾混合因子。

2、设置雾的颜色GL_FOG_COLOR。

3、设置雾的密度GL_FOG_DENSITY。

4、GL_FOG_HINT确定了雾的渲染方式,使用GL_DONT_CARE是因为并不关心建议值。GL_NICEST对每一像素进行雾的渲染,它看起来是极棒的。GL_FASTEST每一顶点进行雾的渲染,它速度较快,但是不够美丽

5、设置雾的范围,即摄像机的位置与片段中心的视觉坐标距离小于GL_FOG_START,即可见,大于GL_FOG_END则不可见,在两者范围之间则受雾浓度方程式的影响

当你看完上述五个条件后,也许你还对雾的设置不是太明白,但是不用担心,当你了解了雾浓度方程式后,你就明白了上述几项都是该方程式的参数。下面来介绍雾的浓度方程式。

RGBA模式下的,雾最终颜色方程式为:



其中表示源片段的颜色索引,表示用GL_FOG_COLOR分配的雾颜色值,f则为雾混合因子:



根据GL_FOG_MODE设置的模式,选择对应的混合因子套入

,即可得到片段在雾效果下的颜色。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: