Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在webgl中合成颜色和纹理_Webgl - Fatal编程技术网

在webgl中合成颜色和纹理

在webgl中合成颜色和纹理,webgl,Webgl,如何在webgl中进行颜色合成?我不确定到底要找什么,也许我漏掉了一个字。我想能够绘制一种颜色或纹理作为覆盖。例如,在这里,我尝试添加不透明度为0.2的黑色覆盖,但不是直接使用颜色,而是减去不透明度。如果我想使用不同的颜色作为覆盖,我将不得不使用不同的工作围绕它。如何在不使用任何变通方法的情况下覆盖/合成不同的颜色或纹理 如果要将纹理颜色变暗为黑色,可以使用简单的乘法: vec4 col=纹理(iChannel0,uv); 列*=0.8;//深20% 或者,如果你想使用一种颜色,你也可以将它们

如何在webgl中进行颜色合成?我不确定到底要找什么,也许我漏掉了一个字。我想能够绘制一种颜色或纹理作为覆盖。例如,在这里,我尝试添加不透明度为0.2的黑色覆盖,但不是直接使用颜色,而是减去不透明度。如果我想使用不同的颜色作为覆盖,我将不得不使用不同的工作围绕它。如何在不使用任何变通方法的情况下覆盖/合成不同的颜色或纹理


如果要将纹理颜色变暗为黑色,可以使用简单的乘法:

vec4 col=纹理(iChannel0,uv);
列*=0.8;//深20%
或者,如果你想使用一种颜色,你也可以将它们相乘

vec4 col=纹理(iChannel0,uv);
vec4色调=vec4(1.0,0.5,0.0,1.0);//橙色
颜色*=色调;

有很多方法可以将颜色混合在一起。另一种在颜色之间创建平滑渐变的方法是。没有一个答案。

感谢您的回复,ya混合可以工作,但不能像我希望的那样与黑色混合。我想出了另一种向纹理添加颜色的方法,比如
(color.rgb-0.5)*color.a但这不适用于灰色。如果有人希望通用解决方案覆盖任何颜色,该怎么办?你可以提出任何主题/讨论,以便我收集更多信息?“叠加”是一个非常模糊的术语,它可以表示任意数量的数学方程。例如,每一个都是通过不同的计算得出的。我的问题很模糊,我会尽力澄清。假设有两种纹理。您想先绘制texture1,然后在其上绘制texture2,但在同一着色器中,不透明度为一半,如何才能做到这一点?在photoshop中,如果您将这两个纹理作为图层,并降低顶层的不透明度,最终图像将看起来自然,并可与任何图像一起使用。如何在单片段着色器中执行相同的操作?您是否查看了我在回答中链接的mix()函数<代码>颜色=混合(纹理1,纹理2,0.5)哦,是的,我试过了,但它忽略了不透明度,但我刚刚意识到我可以使用新颜色的不透明度来获得想要的结果<代码>颜色=混合(纹理、颜色、颜色.a)。谢谢
void mainImage( out vec4 fragColor, in vec2 fragCoord ) {
    vec2 uv = fragCoord/iResolution.xy;

    vec4 col = texture(iChannel0, uv);
    vec4 overlay = vec4(0., 0., 0., 0.2);

    col -= overlay.a;
    
    fragColor = col;
}