首先,不需要混合的,也就是那些不透明的,咱先放在最前面渲染;
接着,咱用以下语句来开始混合操作:
//绘制半透明物件//
::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);//亮度是不变
就看你是想突出哪个物体的颜色了。。。光照当然很重要,立体的效果都是它给照的嘛。。。