如果使用下面的片段着色器,我期望我的纹理完全消失:
varying mediump vec2 text_coord_out;
uniform sampler2D sampler;
void main()
{
gl_FragColor = texture2D(sampler, text_coord_out);
gl_FragColor.w *= 0.0;
}
我尝试过使用gl_FragColor.a,但是它没有起作用。有什么想法吗?
如果使用下面的片段着色器,我期望我的纹理完全消失:
varying mediump vec2 text_coord_out;
uniform sampler2D sampler;
void main()
{
gl_FragColor = texture2D(sampler, text_coord_out);
gl_FragColor.w *= 0.0;
}
我尝试过使用gl_FragColor.a,但是它没有起作用。有什么想法吗?
天啊...我彻底解决了这个问题。片段着色器应该是这样的:
varying mediump float text_alpha_out;
varying mediump vec2 text_coord_out;
uniform sampler2D sampler;
void main()
{
gl_FragColor = texture2D(sampler, text_coord_out);
gl_FragColor = gl_FragColor * text_alpha_out;
}
我的混合效果如下:
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
仅使用gl_fragColor =
一次
vec4
一样对不同变量执行所有操作vec4 red = vec4( 1,0,0,1 );
gl_fragColor = red;
gl_FragColor
的第二次调用没有被忽略。 - Minggl_FragColor.w = 0;
应该可以工作。可能 *= 操作会让 GLSL 编译器感到困惑。