引言
通过本系列前几篇文章的介绍,读者已经能够实现一个功能基本完备的数字高程模型(DEM)OpenGL三维仿真软件。本文作为本系列的最后一篇文章将对雾化、纹理等高级技术的使用进行介绍,通过本文,读者能够在前面的基础上实现一个完整的GIS地景仿真应用软件。
雾化效果 在真实世界中观察地面目标并不是在真空中进行的,而是有大气的存在,无论空气是干燥还是湿润,总会有或多或少的水蒸汽存在,而且还有少量的尘埃存在。它们的存在使得我们在观察远景目标时将不可避免地产生白茫茫的模糊效果,这种效果在OpenGL中也被称为"雾化"。虽然在现实世界中雾化现象妨碍了我们对远景目标的观察效果,但在仿真处理上如果缺少此效果反而会令人感觉不是那么真实。因此,这里就对雾化效果的实现做一个简单的介绍:
if (m_bFogMode == FALSE){ // 雾化效果启用切换 m_bFogMode = TRUE; // 启用雾化处理 glEnable(GL_FOG); glFogi(GL_FOG_MODE, GL_LINEAR); // 采用线性变化的雾化效果 GLfloat fogColor[] = {0.8f, 0.8f, 0.8f, 1.0}; // 指定雾化颜色 glFogfv(GL_FOG_COLOR, fogColor); glFogf(GL_FOG_START, 1.0); // 指定按线性变化时计算公式的参量 glFogf(GL_FOG_END, 10000.0); glHint(GL_FOG_HINT, GL_DONT_CARE); //规定雾化效果的质量 }else{ m_bFogMode = FALSE; // 禁用雾化处理 glDisable(GL_FOG); } |
这段代码允许使能或禁用雾化效果。如果需要启用雾化效果,首先需要通过glEnable()函数使能雾化效果(调用GL_FOG参数),并需通过glFogi()和glFogfv()指定采用何种方式的雾化效果和雾化颜色。这里采用的是线性变化方式,因此还要通过glFogf()指定按线性变化时计算公式的参量。最后调用的glHint()函数将对雾化效果的质量作出规定。如果需要禁用雾化效果,只需简单的调用glDisable()将GL_FOG选项禁用即可。下图分别为未使用雾化效果和使用了雾化效果的场景。可以看出,启用了雾化效果后的场景更加逼真: