我有一张简单的单通道(8位)位图,只有亮度数据,我想将它与现有的帧缓冲混合,就像Photoshop中的屏幕混合模式那样。所以源图的白色像素(255)应该保持不变,源图的50%灰色像素(128)应该使帧缓冲像素变亮50%,源图的黑色像素应该不做改变。我需要设置glColor4f吗?你们中的一些glBlendFunc专家能帮我吗?
屏幕混合是 C = S + (1 - S) × D,所以你需要的是 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR)
。如果你有一个 alpha 通道,只要保持图像数据是预乘格式,就仍然可以获得正确的结果。
这对于直接阿尔法透明度对我有效。
SRC_ALPHA
SRC_ALPHA
ONE
ONE_MINUS_SRC_ALPHA