关于opengl混合的一些道道

来源:互联网 发布:数控切割机编程软 编辑:程序博客网 时间:2024/04/28 12:04

            首先,不需要混合的,也就是那些不透明的,咱先放在最前面渲染;

            接着,咱用以下语句来开始混合操作:

           

//////////////////////////////////////绘制半透明物件//////////////////////////////////////////////::glEnable(GL_BLEND);//glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);//亮度是不变//::glBlendFunc(GL_DST_COLOR , GL_ONE_MINUS_SRC_ALPHA);glBlendFunc(GL_SRC_ALPHA, GL_ONE); //光亮效果//glBlendFunc( GL_SRC_ALPHA,GL_DST_ALPHA); //perferct//glBlendFunc(GL_ONE, GL_ONE);         //简单的颜色叠加//glBlendFunc( GL_ONE,GL_ONE_MINUS_SRC_ALPHA);//源颜色完全的参与混合,目标颜色//glBlendFunc( GL_ONE,GL_DST_ALPHA);    //比较明亮//::glEnable(GL_ALPHA_TEST);//::glAlphaFunc(GL_GREATER, 0.5);           //alpha大于0.5的显示,其余透明::glDepthMask(GL_FALSE);                    // 下面将绘制半透明物件了,因此将深度缓冲设置为只读::glEnable(GL_DEPTH_TEST);                  //打开深度测试::glClear(GL_DEPTH_BUFFER_BIT);             //清深度缓存区
         这里插入要渲染的东东。。。

          最后别忘了

    

glDepthMask(GL_TRUE);                  //半透明物体绘制完毕后,将深度缓存设置为可读可写


        来一点总结吧,glBlendFunc(s,d);其中s代表源因子,d代表目的因子,源因子是即将绘上去的物体,目的因子是已经绘上去的物体,so,这两个因子的值不同组合时,会产生不同的混合效果。所以,绘制的先后顺序,还是会影响效果的。。。不信,你试试这个组合glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);//亮度是不变

就看你是想突出哪个物体的颜色了。。。光照当然很重要,立体的效果都是它给照的嘛。。。

原创粉丝点击