随笔-38  评论-23  文章-0  trackbacks-0

趁着在安装东西的时候,想起来好久没把这些东西总结出来.于是凑合着写着吧..在循序渐进的学习过程中.NEHE的教程我已经看到20课多了 而我发上来的却才是第7课.也不知道自己在忙些什么.总想着能快速的学完.然后学完之后却忘了很多了. 今天趁着这个空闲时候看看能写出多少吧..

nehe lesson_8的内容是有关于颜色混合 Apha混合.我们曾在使用glClearColor(1.0,1.0,1.0,1.0)使用过颜色值的4个分量.前三个则是RGB 那么第4个呢? 就是现在所说的Apha分量.它将会在混合当中用到.

Apha混合 原理是一个数学公式.:
(当前绘制颜色RGB分量)*当前Apha分量+.:(背景颜色RGB分量)*(1-当前Apha分量)

其次它文中提到了一点:
绘制混色时候,需要关闭深度测试.虽然这是不正确的方法.因为我们需要在半透明的图形背后绘制对象.但这往往会工作的很好,所以这课当中我们用到正是这种方法
而对于混合的正确绘制过程应当如下所示:
正确的混色过程应该是先绘制全部的场景之后再绘制透明的图形。并且要按照与深度缓存相反的次序来绘制(先画最远的物体)。考虑对两个多边形(1和2)进行alpha混合,不同的绘制次序会得到不同的结果。(这里假定多边形1离观察者最近,那么正确的过程应该先画多边形2,再画多边形1。正如您再现实中所见到的那样,从这两个<透明的>多边形背后照射来的光线总是先穿过多边形2,再穿过多边形1,最后才到达观察者的眼睛。)在深度缓存启用时,您应该将透明图形按照深度进行排序,并在全部场景绘制完毕之后
再绘制这些透明物体。否则您将得到不正确的结果。我知道某些时候这样做是很令人痛
苦的,但这是正确的方法。

对于混色操作:我们应当使用的步骤则是:
glEnable(GL_BLEND);//开启混色功能
glBlendFunc(GL_SRC_ALPHA,GL_ONE);//启用源Apha混色
对于本课当中:在启用混色之后应当关闭深度测试 glDisable(GL_DEPTH_TEST);
这次源码是基于lesson_7修改而来.并没有多大的变化.而且对于读取bmp并没有修改为我之前我所写的bmpLoader的方式
源代码如下:
lesson_8

效果如下:



posted on 2009-08-08 17:14 米游 阅读(394) 评论(0)  编辑 收藏 引用 所属分类: OpenGL/OSG

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理