Webgl Blending融合到白色

问题描述 投票:0回答:1

我已经为webgl编写了一个库,它有很多测试并且运行这些测试非常精细,包括我用于混合的测试。

我已经设置了测试来进行Src_Alpha,One_minus_Src_Alpha的标准混合,并且测试正确地呈现结果:

enter image description here

该图像通过交叉1000条线而产生,所有线的α值均为0.2。注意图像在任何给定点都不会产生褪色的白色。

这也是使用chrome的webgl 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

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

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

webgl alphablending blending
1个回答
0
投票

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

我抓住gl上下文两次:canvas.getContext(...),每个都有可能为上下文的预乘alpha和alpha设置属性等事物提供不同的属性。

当我解决这个问题时,这个奇怪的混合错误就消失了。因此,我将假设两个上下文抓取之间的预乘alpha属性在某种程度上是不一致的。

© www.soinside.com 2019 - 2024. All rights reserved.