OGL浅学_雾效果

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

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

OGL浅学_雾效果_第1张图片

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

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_LinerGL_EXPGL_EXP2...雾的模式决定了雾混合因子。

2、设置雾的颜色GL_FOG_COLOR

3、设置雾的密度GL_FOG_DENSITY

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

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

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

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

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


根据GL_FOG_MODE设置的模式,选择对应的混合因子套入,即可得到片段在雾效果下的颜色。

你可能感兴趣的:(OpenGL)