OpenGL --混合、多重采样

作者: 乔克蜀黍 | 来源:发表于2018-03-16 11:54 被阅读32次
    颜色混合

    在OpenGL中使用glEnable(GL_BlEND)来开启颜色混合。
    目标颜色:已经存储在颜色缓存区的颜色值
    源颜色:作为当前渲染命令结果进入颜色缓存区的颜色值
    当混合功能被启动时,源颜色和目标颜色的组合方式是混合方程式控制的。在默认情
    况下,混合方程式如下所示:
    Cf = (Cs * S) + (Cd * D)

    • Cf :最终计算参数的颜色
    • Cs : 源颜色
    • Cd :目标颜色
    • S:源混合因子
    • D:目标混合因子

    设置混合因子,需要用到glBlendFun函数
    glBlendFunc(GLenum S,GLenum D)
    S:源混合因子 D:目标混合因子

    OpenGL混合因子.png
    上图为混合因子枚举列表,表中R、G、B、A 分别代表 红、绿、蓝、alpha。
    表中下标S、D,分别代表源、 目标
    表中C 代表常量颜色(默认黑 色)。
    常用颜色混合函数glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)

    总结:
    最终颜色是以原先的目标颜色与 后来的源颜色进行组合。源颜色的 alpha值越高,添加的源颜色成分越高,目标颜色所保留的成分就会越少。
    混合函数经常用于实现在其他一些不透明的物体前面绘制一个透明物体的效果。

    抗锯齿

    混合还可以达到抗锯齿的效果

    开启混合处 glEnable(GL_BLEND);
    指定混合因子 GLBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
    指定混合 程式 glBlendEquation(GL_FUNC_ADD);
    glEnable(GL_POINT_SMOOTH)对点进行抗锯齿出处理
    glEnable(GL_LINE_SMOOTH)对线进行抗锯齿出处理
    glEnable(GL_POLYGON_SMOOTH)对多边形进抗锯齿处理

    多重采样

    多重采样也可以达到抗锯齿的效果,多重采样会对颜色进行多次采集然后存到多重采样缓存区。

    可以调 glutInitDisplayMode 添加采样缓存区 glutInitDisplayMode(GLUT_MULTISAMPLE);
    可以使 glEnable| glDisable组合使 GLUT_MULTISAMPLE 打开| 关闭 多重采样。

    glEnable(GLUT_MULTISAMPLE);
    glDisable(GLUT_MULTISAMPLE);
    

    多重采样缓存区在默认情况下使 段RGB值,并 包含颜 的alpha成分,我们可以通过调 glEnable来修改这个 为:

    • GL_SAMPLE_ALPHA_TO_COVERAGE 使 alpha值
    • GL_SAMPLE_ALPHA_TO_ON 使 alpha值并设为1,并 使 它。
    • GL_SAMPLE_COVERAGE 使 glSampleCoverage 所设置的值。
      当启 GL_SAMPLE_COVERAGE 时,可以使 glSampleCoverage函数允许指定 个特定的值,它是与 段覆盖值进 按位与操作的结果。

    相关文章

      网友评论

        本文标题:OpenGL --混合、多重采样

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