OpenGL 混合

作者: 寻常_0 | 来源:发表于2019-05-16 16:26 被阅读0次

原因

颜色缓冲区存储着像素点的颜色信息,当深度缓冲区开启时,当该像素点深度小于原来的深度时的颜色信息就会被替换为新的颜色信息。当我们的颜色携带透明度信息时,就需要用到混合。

混合颜色

目标颜色 已经存储在颜色缓存区的颜色值
源颜色 作为当前渲染命令结果进入颜色缓存区的颜色值
当混合功能被启动时,源颜色和⽬标颜色的组合方式是混合方程式控制的。在默认情况下,混合⽅方程式如下所示:
Cf = (Cs * S) + (Cd * D)
Cf :最终计算参数的颜色
Cs : 源颜色
Cd :目标颜色
S:源混合因子
D:⽬标混合因子

使用

开启混合
glEnable(GL_BlEND)

image.png

设置混合因子
glBlendFunc(GLenum S,GLenum D)
S:源混合因⼦子
D:⽬目标混合因⼦子
混合因子如下图:

颜色混合

模拟案例

下⾯通过一个常见的混合函数组合来说明问题:
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) 如果颜⾊缓存区已经有一种颜色红色(1.0f,0.0f,0.0f,0.0f),这个目标颜色Cd,如果在这上面用⼀种alpha为0.6的蓝⾊色(0.0f,0.0f,1.0f,0.6f)
Cd (⽬目标颜⾊色) = (1.0f,0.0f,0.0f,0.0f)
Cs (源颜⾊色) = (0.0f,0.0f,1.0f,0.6f);
S = 源alpha值 = 0.6f
D = 1 - 源alpha值= 1-0.6f = 0.4f
⽅方程式Cf = (Cs * S) + (Cd * D)
等价于 = (Blue * 0.6f) + (Red * 0.4f)

更改组合方式

选择混合⽅程式的函数:
glbBlendEquation(GLenum mode)

混合方程式模式

glBlendFuncSeparate函数

除了能使用glBlendFunc 来设置混合因子,还可以有更灵活的选择

void glBlendFuncSeparate(GLenum strRGB,GLenum dstRGB ,GLenum strAlpha,GLenum dstAlpha);
strRGB: 源颜色的混合因子
dstRGB: ⽬标颜色的混合因子 
strAlpha: 源颜色的Alpha因子 
dstAlpha: ⽬标颜色的Alpha因子

glBlendFunc指定源和⽬标 RGBA值的混合函数;
glBlendFuncSeparate函数则允许为RGBAlpha 成分单独指定混合函数
GL_CONSTANT_COLOR、GL_ONE_MINUS_CONSTANT_COLOR、GL_CONSTANT_ALPHA、GL_ONE_MINUS_CONSTANT值允许混合方程式中引入一个常量混合颜色。
常量混合颜色,默认初始化为⿊色(0.0f,0.0f,0.0f,0.0f)
修改常量混合颜色
void glBlendColor(GLclampf red ,GLclampf green ,GLclampf blue ,GLclampf alpha )

相关文章

  • Opengl混合算法探究

    在我们的实际应用中使用OpenGL进行混合常见的问题有以下三种: 使用Opengl自带的混合算法 自定义混合算法 ...

  • OpenGL 混合

    开启深度测试后,如果重叠的图层中,上层的图层是半透明的情况下我们不能采用直接覆盖的方式,而需要用到混合,在图层重叠...

  • OpenGL 混合

    原因 颜色缓冲区存储着像素点的颜色信息,当深度缓冲区开启时,当该像素点深度小于原来的深度时的颜色信息就会被替换为新...

  • NDK OpenGL ES 3.0 开发(十二):混合

    该原创文章首发于微信公众号:字节流动 OpenGL ES 混合 OpenGL ES 混合本质上是将 2 个片元的颜...

  • OpenGL中图层混合公式的一点探讨

    OpenGL中图层混合公式的一点探讨 一、问题的提出 OpenGL混合的时候,常常会用到如下一个公式: 其中Cf表...

  • opengl学习-混合

    不使用混合如何实现透明度 通过在片源着色器中添加if (texColor.a < 0.1) discard;来根据...

  • OpenGL-颜色混合浅析

    基础理论 在OpenGL中,物体透明技术通常被叫做混合(Blending)。 OpenGL渲染时会把颜色值存在颜色...

  • 高级OpenGL-03.混合(Blending)

    混合 在OpenGL中,物体透明技术通常被叫做混合(Blending)。透明的物体(或物体的一部分)非纯色而是混合...

  • 混合、面剔除

    混合 在OpenGL中,物体透明技术通常被叫做混合(Blending)。透明是物体(或物体的一部分)非纯色而是混合...

  • OpenGL --混合、多重采样

    颜色混合 在OpenGL中使用glEnable(GL_BlEND)来开启颜色混合。目标颜色:已经存储在颜色缓存区的...

网友评论

    本文标题:OpenGL 混合

    本文链接:https://www.haomeiwen.com/subject/poviaqtx.html