我想使用阿尔法混合(SRC_ALPHA, ONE_MINUS_SRC_ALPHA),基本上是这样的:
frag_out.aaaa * frag.out + ((1.0, 1.0, 1.0, 1.0) - frag_out.aaaa) * pixel_color假设屏幕上的像素颜色是(1.0, 1.0, 1.0, 1.0),我目前正在呈现的颜色是(1.0, 1.0, 1.0, 0.4)
当我呈现这一点时,屏幕上产生的颜色有一个alpha 0.76 (尽管它以前完全不透明)
的确:
(0.4, 0.4, 0.4, 0.4) * (1.0, 1.0, 1.0, 0.4) + (0.6, 0.6, 0.6, 0.6) * (1.0, 1.0, 1.0, 1.0) = (1.0, 1.0, 1.0, 0.76)因此,基本上屏幕上的颜色是不透明的(白色),在我把一个透明的雪碧放在上面之后,屏幕变得透明(0.76alpha),我可以透过背景观看。如果我能像这样把它混合在一起,那就太完美了:
(0.4, 0.4, 0.4, 1.0) * (1.0, 1.0, 1.0, 0.4) + (0.6, 0.6, 0.6, 0.6) * (1.0, 1.0, 1.0, 1.0) = (1.0, 1.0, 1.0, 1.0)是否有可能做到这一点?如果是,怎么做?
发布于 2016-10-16 09:31:45
当使用RGB 3.0及以上版本时,这是完全可能的,因为混合函数可以分别设置为RGB和A。对于您的情况,这将是
glBlendFuncSeparate(GL_SOURCE_ALPHA, GL_ONE_MINUS_SOURCE_ALPHA, GL_ONE, GL_ONE);指定目标alpha的混合因子的最后一个参数可能必须调整,因为您没有指定目的地alpha < 1的行为。有关更多细节,请查看功能文档。
https://stackoverflow.com/questions/40068078
复制相似问题