【问题标题】:Which GL blend mode for blending the same color in source and destination, and getting the same color back?哪种 GL 混合模式可以在源和目标中混合相同的颜色,并返回相同的颜色?
【发布时间】:2022-01-17 06:43:35
【问题描述】:

我的纹理具有纯色背景(比如说海军蓝,#000080)和白色文本。即使纹理是具有背景和文本的单个文件,我也希望仅使文本淡出。

我准备了第二个纹理,只是纯海军蓝,没有任何文字。我想通过修改纹理的 alpha 层来“淡化”文本,直到只剩下第二个纹理(没有文本的蓝色)。

我的问题是,当我开始使前层(颜色+文本)透明时,文本会按我的预期淡出,但生成的蓝色更暗。我看到的蓝色是背景颜色蓝色(#000080),被它前面的半透明层染成深色。经过一番阅读,我似乎想为这部分修改 OpenGL 的混合模式。

我正在寻找一种可以生成的混合模式:

#000080 + #000080*tranparency = #000080
#000080 + #FFFFFF*transparency = #FFFFFF*transparency

我尝试过GL_MINGL_MAX,但这些似乎不是我要在这里寻找的...

【问题讨论】:

    标签: c++ opengl 3d


    【解决方案1】:

    你不应该只需要:

    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glBlendEquation(GL_ADD);
    glEnable(GL_BLEND);
    

    对应如下:

    original_pixel  = [0, 0, 0.5, 1]
    incoming_pixel = [0, 0, 0.5, 0.5]
    
    final_pixel = incoming_pixel * 0.5 + original_pixel * (1 - 0.5);
    

    应该保持颜色不变。

    您不需要第二个纹理 - 只需用正确的颜色绘制一个无纹理的四边形。

    【讨论】:

      猜你喜欢
      • 2020-12-25
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多