黎明的剔透里伸出了你沁清的暧昧

Graphics|EngineDev|GameDev|2D&3D Art

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  60 随笔 :: 1 文章 :: 18 评论 :: 0 Trackbacks
混合,混合方程,修改混合方程 
混合常用于实现一些不透明的物体前面绘制一个透明的物体,但是这种技巧需要首先绘制背景物体 再绘制经过混合的透明物体
,用这种技巧结合光照系统来达到透明映射的效果来欺骗用户。
混合因子:
混合的公式:最终的颜色=源颜色*源混合因子+目标颜色*目标混合因子
OpenGL使用函数:void glBlendFunc(s,d);来控制源因子和目标因子
s指明怎么计算源混合因子,d指明怎么计算目标混合因子

启用混合:
在指定如何计算混合因子之后,要使混合有效要先启用混合
glEnable(GL_BLEND);
要禁止混合功能:
glDisable(GL_BLEND);

实现:
要想在程序中使用混合并绘制出具有透明效果的3D场景,只启用混合与指定混合因子是不够的,因为在3D场景还有物体深度信息,一般的步骤是:首先启用深度测试的情况下,绘制所有的场景(包括所有不都明物体),然后再绘制透明的物体。而且要按照与深度缓存相反的次序来绘制,即按照由远即近的次序绘制物体;
1.启用深度测试
2.绘制场景中所有不透明的物体
3.关闭深度测试或者设置深度缓存为只读模式,并启用混合
4.绘制透明物体,按照由远即近的顺序
5.回复深度测试







 1        glPushMatrix();
 2          glLightfv(GL_LIGHT0,GL_POSITION,lightPosMirr);
 3          glScalef(1,-1,1);
 4          DrawObj();    
 5        glPopMatrix();
 6        //以融合的方式绘制透明的地板,再在上面绘制物体
 7         glEnable(GL_BLEND);
 8         glBlendFunc(GL_SRC_ALPHA, GL_ONE);
 9         DrawGround();
10         glDisable(GL_BLEND);//关闭融合,来绘制真正的物体
11         glEnable(GL_LIGHTING);
12         glLightfv(GL_LIGHT0, GL_POSITION, lightPOs);
13        DrawObj();


 
posted on 2011-11-06 01:32 情绝格调(fresmaster) 阅读(266) 评论(0)  编辑 收藏 引用 所属分类: Graphics

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理