哪种 GL 混合模式用于在源和目标中混合相同的颜色,并获得相同的颜色?

Which GL blend mode for blending the same color in source and destination, and getting the same color back?

我有一个带有纯色背景(比如说海军蓝,#000080)和白色文字的纹理。尽管纹理是包含背景和文本的单个文件,但我只想让文本淡出。

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

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

我正在寻找生成的混合模式:

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

我已经尝试了 GL_MINGL_MAX,但这些似乎不是我在这里寻找的那些...

你应该只需要:

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);

应该保持颜色不变。

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