OpenGLES 2.0片段着色器alpha失败?

jbg*_*jbg 3 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;
}
Run Code Online (Sandbox Code Playgroud)

...it没有.我也试过gl_FragColor.a.思考?

jbg*_*jbg 9

天啊......我完全解决了这个问题.片段着色器看起来像这样:

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;
}
Run Code Online (Sandbox Code Playgroud)

我的混合看起来像这样:

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
Run Code Online (Sandbox Code Playgroud)

  • 你能不止一次打电话给gl_fragColor =.第二次通话不会被忽略.我一直这样做. (4认同)

GLE*_*LES 7

gl_fragColor =仅使用一次

  1. vec4在这种情况下,对另一个变量执行所有操作
  2. 你可以使用它作为输出,如:

vec4 red = vec4( 1,0,0,1 );
gl_fragColor = red;
Run Code Online (Sandbox Code Playgroud)


Nic*_*las 5

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