OpenGLES 2.0片段着色器alpha失败?

时间:2011-07-24 07:46:32

标签: 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;
}

。 。 .it没有。我也试过gl_FragColor.a。想法?

4 个答案:

答案 0 :(得分:9)

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);

答案 1 :(得分:7)

仅使用gl_fragColor =

  1. 对不同的变量执行所有操作,例如在这种情况下为另一个vec4
  2. 您可以将此作为输出,例如:

  3. vec4 red = vec4( 1,0,0,1 );
    gl_fragColor = red;
    

答案 2 :(得分:5)

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

答案 3 :(得分:0)

gl_FragColor.w = 0;

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