关于OpenGL混合详细解析

OpenGL中的混合,其实并没有想象中的那么简单,初学时只是简单理解到混合是   源X源混合因子+目标X目标混合因子,然而通过写程序,发现,并没有达到想象的效果,代码如下

 glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE);

glColor4f(
1,0,0,0.1);
glRectf(
-2,-2,0,0);

glColor4f(
0,0,1,0.5);
glRectf(
-1,-1,1,1);

初学时最容易犯的错误是认为,第一个红色的矩形是glBlendFunc函数中第二个参数指定的目标片段,而紧接着绘制的是glBlendFunc的第一个参数所指定的源片段,然后运行出混合效果,然而运行后,你会发现,两个矩形都比原来的真实颜色暗(这里的“原来”是指,注释掉以上代码前两行后的运行结果),此时可以怀疑,是否是GL_SRC_ALPHA影响了两个矩形,换句话说,两个矩形在这里是否应该都是作为源片段!!!

通过将glBlendFunc的第一个参数改成GL_ZERO,发现,两个矩形都消失了,此时可以断定,二者都是源片段。

 glColor4f(1,0,0,0.1);
glRectf(
-2,-2,0,0);

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE);

glColor4f(
0,0,1,0.5);
glRectf(
-1,-1,1,1);

将代码改成这样后,按说在启用混合前先把第一个矩形绘制进缓存中后,此时第一个矩形应该就是混合函数中的目标片段了,然后再绘制第二个矩形,理所应当,这个矩形该是源片段,然而,运行后发现,此结果和上面的运行结果一样,两个矩形此时仍然都是源片段。

为什么呢???因为没有在混合结束是加上glDisable(GL_BLEND),由于OpenGL是一个状态机,在启用混合功能后,如果没有禁止,那么他将一直起作用,所以之前第一个绘制的矩形在循环渲染中,将一直被当做新画的矩形,和第二个矩形一起,作为源片段,导致二者会同时变暗,所以只有在以上代码加上glDisable(GL_BLEND)之后,才能正确的执行混合效果

转载于:https://www.cnblogs.com/apapaxionga/archive/2011/07/22/2114139.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值