混合如何与WebGL中的GLSL ES片段着色器一起使用?
|
我正在尝试使用WebGL显示一个简单的效果。自然,这意味着我正在使用GLSL ES 1.0规范中定义的片段着色器语言。
我正在使用的代码大部分是从其他来源复制的。它建立一个正方形,并使用片段着色器和顶点着色器确定像素颜色。以下代码将仅显示一个白色正方形。
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
但是,如果我将alpha分量更改为“ 1”,那么它将显示一个黑色正方形。
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); // displays a black square
我假设片段着色器输出的颜色必须与某些以前的颜色组合。如何确定只有最后一种颜色(无论其alpha值如何)才是实际选择的显示颜色?
或者,也许我以错误的方式获得了订单。也许有一个后期阶段与片段着色器中的颜色组合以产生白色。无论如何,我知道正在进行某种混合,因为当我将alpha值更改为0.5时,我得到一个灰色方块。我只想知道,白色是哪里来的?我该如何摆脱呢?
据我所知,问题不在于混合功能。代码在GitHub上。在Google Chrome或Firefox中试用。
没有找到相关结果
已邀请:
3 个回复
末钉蹈泰唬
犁攀富
它将颜色缓冲区的透明颜色初始化为白色并启用Alpha混合。 因此,要摆脱您的问题,只需不要启用混合。换句话说,丢失“ 6”的陈述。 更新: 现在,您已经发布了代码,听起来您的问题与我所猜测的相反。假设您希望根据设置的Alpha来显示黑色背景,则应将
替换为
孝铜差
是黑色的,覆盖范围为0.0。换句话说,完全透明。
是黑色的,具有1.0 alpha覆盖率。换句话说,完全不透明。听起来输出是100%正确的。 让我澄清一下,以防万一上面的内容不清楚(这似乎使我感到困惑)。 最后一个数字仅影响颜色的透明度,前三个数字分别影响红色,绿色和蓝色。 我不确定它们的最大值/最小值,但是在Web浏览器(我的专业领域)中,颜色从0到255。其中0都不是该颜色,而255是所有该颜色。 因此,在您的情况下,您要求的方块包含0个红色,0个绿色和0个蓝色(仅黑色)。但是,当您将透明度(alpha通道)设置为零时,它将呈现为白色(或更可能是透明的,并且其背后的任何内容都是白色)。将Alpha透明度设置为.5时,它将呈现黑色(应为0,0,0),但只有一半可见。将Alpha透明度设置为1.0时,它将呈现一个完全不透明的黑色正方形。 合理?