Webgl混合正在混合为白色

时间:2019-04-23 16:15:10

标签: webgl alphablending blending

我为webgl编写了一个库,它具有许多测试,并且可以很好地运行那些测试,包括我用于混合的测试。

我将测试设置为Src_Alpha,One_minus_Src_Alpha的标准混合,并且测试正确地呈现了结果:

enter image description here

此图像是通过相交1000条所有alpha值为0.2的行而产生的。请注意,图像在任何给定的点如何不会产生褪色的白色。

这也是使用webgl Spector chrome插件产生的当前混合状态:

Blend State
BLEND: true
BLEND_COLOR: 0, 0, 0, 0
BLEND_DST_ALPHA: ONE_MINUS_SRC_ALPHA
BLEND_DST_RGB: ONE_MINUS_SRC_ALPHA
BLEND_EQUATION_ALPHA: FUNC_ADD
BLEND_EQUATION_RGB: FUNC_ADD
BLEND_SRC_ALPHA: SRC_ALPHA
BLEND_SRC_RGB: SRC_ALPHA

现在,我使用相同的库并在布局中渲染相同的边缘,它们的渲染方式如下:

enter image description here

这些边缘的不透明度为0.2。这是Spector混合模式:

Blend State
BLEND: true
BLEND_COLOR: 0, 0, 0, 0
BLEND_DST_ALPHA: ONE_MINUS_SRC_ALPHA
BLEND_DST_RGB: ONE_MINUS_SRC_ALPHA
BLEND_EQUATION_ALPHA: FUNC_ADD
BLEND_EQUATION_RGB: FUNC_ADD
BLEND_SRC_ALPHA: SRC_ALPHA
BLEND_SRC_RGB: SRC_ALPHA

我在桌子上跳动,试图弄清楚这两种情况之间的区别。

着色器逻辑只是将顶点上的颜色传递给片段着色器,因此没有预乘的alpha。

我只需要任何其他想法就能以这种有害的方式影响融合。我可以张贴任何需要的其他信息。

编辑:要在这种环境下显示相同的精确测试,以下是滚轮渲染并以某种方式添加到白色冲洗中:

enter image description here

1 个答案:

答案 0 :(得分:0)

似乎我的库中可能存在一些不良的未定义行为:

我两次抓取gl上下文:canvas.getContext(...),每个对象都有可能具有不同的属性,例如上下文的预乘alpha和alpha设置属性。

当我解决该问题时,这个奇怪的混合错误就消失了。因此,我将假定两次上下文获取之间的预乘alpha属性不一致。