如何在片段着色器中组合纹理颜色和均匀颜色?

时间:2014-04-29 19:17:33

标签: opengl-es fragment glsl webgl shader

我想为两者使用一个着色器,彩色矩形和/或呈现纹理的矩形。这是我的方法:

precision mediump float;
uniform vec4 u_color;

uniform sampler2D u_image;
varying vec2 v_texCoord;

void main(void) {

vec4 texCol = texture2D(u_image, v_texCoord);

gl_FragColor = texCol * u_color;
}

但我一无所获。我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

如果您没有为采样器指定有效纹理,则texture2D调用将返回透明黑色 - vec4(0.0, 0.0, 0.0, 0.0)。乘以该值将再次产生黑色。

使用一个只有一个纯白色纹素的纹理,而不是尝试使用“无纹理”。这将导致乘法产生u_color

或者,您只需在两个着色器程序之间切换,一个用于无纹理几何,另一个用于纹理几何。切换程序(gl.useProgram)并不是非常昂贵。