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源码