Opengl es OpenGLES 2.0片段着色器alpha失败?

Opengl es OpenGLES 2.0片段着色器alpha失败?,opengl-es,opengl-es-2.0,Opengl Es,Opengl Es 2.0,我希望我的纹理使用以下片段着色器完全消失: 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。思想?为什么它会消失?输出颜色的alpha值没有意义,除非您赋予它意义。通常,这意

我希望我的纹理使用以下片段着色器完全消失:

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。思想?

为什么它会消失?输出颜色的alpha值没有意义,除非您赋予它意义。通常,这意味着使用某种形式的。请注意,该链接描述了桌面OpenGL;GL-ES等价物的工作方式大致相同,但桌面GL可能比ES有更多的功能。

OMG…我完全修复了这个问题。片段着色器如下所示:

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);
我的混合看起来像这样:

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\u fragColor=

  • 在本例中,对不同的变量执行所有操作,如另一个
    vec4
  • 您可以将其用作输出,如:


  • 应该有用。可能*=操作使GLSL编译器感到困惑。

    谢谢。这让我更亲近了。我从“格伦纳布尔”(glEnable)走了出来;glBlendFunc(GL_ONE,GL_ONE减去SRC_ALPHA);'至:'glBlendEquationSeparate(GL_FUNC_ADD,GL_FUNC_ADD);glBlendFuncSeparate(GL_SRC_ALPHA,GL_ONE_减去glu SRC_ALPHA,GL_SRC_ALPHA,GL_ZERO);'但再次介绍:问题似乎是我有预乘alpha的纹理。GL_SRC_ALPHA作为混合函数的第一个参数不起作用。但是如果我使用GL_ONE,那么混合就不会发生在着色器中。想法?@datafatmunger:混合不应该在着色器中发生。因此,我不确定您的问题是什么。每个着色器程序只能调用“gl\u fragColor=”一次。第二次调用被忽略。您可以多次调用gl_fragColor=吗。第二次呼叫不会被忽略。我一直这么做,我怀疑。在我的实验中,对
    gl\u FragColor
    的第二次调用并没有被忽略。