哪种 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_MIN
和 GL_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);
应该保持颜色不变。
您不需要第二个纹理 - 只需使用正确的颜色绘制一个无纹理的四边形即可。
我有一个带有纯色背景(比如说海军蓝,#000080)和白色文字的纹理。尽管纹理是包含背景和文本的单个文件,但我只想让文本淡出。
我准备了第二个纹理,只是纯海军蓝色,没有任何文字。我想通过修改纹理的 alpha 层来“淡出”文本,直到只剩下第二个纹理(蓝色,没有文本)。
我的问题是,当我开始使前层(颜色+文本)透明时,文本如我所料淡出,但生成的蓝色更暗。我看到的蓝色是背景色蓝色 (#000080),被它前面的半透明层染成深色。经过一番阅读,我似乎想为这部分修改 OpenGL 的混合模式。
我正在寻找生成的混合模式:
#000080 + #000080*tranparency = #000080
#000080 + #FFFFFF*transparency = #FFFFFF*transparency
我已经尝试了 GL_MIN
和 GL_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);
应该保持颜色不变。
您不需要第二个纹理 - 只需使用正确的颜色绘制一个无纹理的四边形即可。