OGL浅学_雾效果
2016-02-05 10:25
225 查看
所谓雾效果,就是使远处的物体看上去逐渐变得模糊。雾在本质上是一种视觉模拟应用,用于模拟有线可视性的场合。
当雾启用后,远离观察点的物体开始融入到雾颜色中。可以控制雾的浓度,它决定了物体随着距离的增加而融入到雾颜色的速度,另外还可以设置雾的颜色。下面先看一张雾的效果图:
![](http://img.blog.csdn.net/20160205102240148?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
在大型的模拟程序中,雾可以提高性能,因为它可以选择不绘制那些因为雾的影响而不可见的物体。下面我们来看一下雾的使用:
首先是启用雾效果,然后用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模式下的,雾最终颜色方程式为:
![](http://img.blog.csdn.net/20160205102932198?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
。
其中表示源片段的颜色索引,表示用GL_FOG_COLOR分配的雾颜色值,f则为雾混合因子:
![](http://img.blog.csdn.net/20160205102246922?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
根据GL_FOG_MODE设置的模式,选择对应的混合因子套入
![](http://img.blog.csdn.net/20160205102932198?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
,即可得到片段在雾效果下的颜色。
当雾启用后,远离观察点的物体开始融入到雾颜色中。可以控制雾的浓度,它决定了物体随着距离的增加而融入到雾颜色的速度,另外还可以设置雾的颜色。下面先看一张雾的效果图:
在大型的模拟程序中,雾可以提高性能,因为它可以选择不绘制那些因为雾的影响而不可见的物体。下面我们来看一下雾的使用:
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设置的模式,选择对应的混合因子套入
,即可得到片段在雾效果下的颜色。
相关文章推荐
- Item 4: 知道怎么去看推导的类型
- JSON 之FastJson解析
- C++ 排序算法实现 及 性能比较
- HDU 2524 矩形A + B(简单推公式)
- python selenium ---键盘事件
- MySql导入导出数据库(含远程导入导出)
- 自定义Android六边形进度条(附源码)
- 在软件项目管理中怎样把时间估算的靠近真实值?
- 严重: Dispatcher initialization failed java.lang.RuntimeException: java.lang.reflect.Invoc
- Struts2初学 struts.xml详解 一
- c#之显示实现接口
- spring aop代理不了父类,会忽略从父类继承的方法。
- struts2设置加载非默认路径的struts.xml文件解决方案
- Struts2初学 Struts.xml详解二
- Android编程中FileOutputStream与openFileOutput()的区别分析
- Android 百度地图POI搜索功能实例代码
- SAP接口编程-RFC系列08 : 获取SAP DDIC的数据字段
- unity用oculus播放全景视频
- Struts2初学 Struts2的action接收用户数据方式
- 再流弊的技术,也抵不过一次事故:兼谈技术管理