沈阳康平志诚建设集团网站谷歌seo优化排名
QT之OpenGL混合
- 1. 概述
 - 2. 实现
 - 2.1 丢弃片段
 - 2.1.1 Demo
 - 2.2 混合
 - 2.2.1 相关函数
 - 2.2.2 排序问题
 
- 2.2.3 Demo
 
1. 概述
OpenGL中,混合(Blending)通常是实现物体透明度(Transparency)的一种技术。
2. 实现
2.1 丢弃片段
在某些情况下,有些片段是只需要设置显示或者不显示,而不需要考虑其透明的情况。而此时就需要对不显示的片段进行丢弃(Discard)操作。此时的片段丢弃是根据alpha通道的值判断的。
2.1.1 Demo
Demo源码
 
2.2 混合
混合(Blending)相对于丢弃(Discard)来说则是处于一种中间的状态,即所有的片段都要绘制,但是各片段存在叠加的状态。
2.2.1 相关函数
-  
启用混合模式
glEnable(GL_BLEND); -  
告诉
OpenGL该如何混合

/* sfactor : 源因子 dfactor : 目标因子 glBlendColor()可以用来设置常量颜色 */ glBlendFunc(GLenum sfactor, GLenum dfactor) /* 此函数则可以为RGB和alpha通道分别设置不同的选项 */ glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO);
/* 可以影响混合方程的计算方式,一般是默认的设置 */ glBlendEquation(GLenum mode)
 
2.2.2 排序问题
在混合绘制的时候通常有遵循以下原则:
- 先绘制所有不透明的物体
 - 对所有透明的物体排序
 - 按顺序绘制所有透明的物体
 
否则容易出现遮挡情况,如下所示:
 
 排序后的效果如下:
 
2.2.3 Demo
混合Demo源码
