Android libgdx-着色器忽略第一帧中的混合/alpha

Android libgdx-着色器忽略第一帧中的混合/alpha,android,opengl-es,libgdx,shader,alpha,Android,Opengl Es,Libgdx,Shader,Alpha,我正在使用alpha颜色小于1.0的着色器渲染libgdx网格 渲染第一帧时,将忽略着色器中设置的alpha值,并渲染为1.0。以下所有渲染帧都可以 在以前使用GLDrawArray绘制线条和形状的项目中,我也遇到了同样的情况,但我还没有找到解决方案 libgdx render()循环中的代码: 我的着色器(在create(){}中编译): 如何按原样渲染第一帧? 感谢create()中的glBlendFunc实现了这个技巧,特别是:“Gdx.gl20.glBlendFunc(gl20.GL_S

我正在使用alpha颜色小于1.0的着色器渲染libgdx网格

渲染第一帧时,将忽略着色器中设置的alpha值,并渲染为1.0。以下所有渲染帧都可以

在以前使用GLDrawArray绘制线条和形状的项目中,我也遇到了同样的情况,但我还没有找到解决方案

libgdx render()循环中的代码:

我的着色器(在create(){}中编译):

如何按原样渲染第一帧?


感谢create()中的glBlendFunc实现了这个技巧,特别是:“Gdx.gl20.glBlendFunc(gl20.GL_SRC_ALPHA,L20.GL_ONE_减去_SRC_ALPHA);”我正在使用SpriteBatch在网格之后渲染字体。glBlendFunc包含在SpriteBatch内部,看起来这就是为什么所有其他帧都很好的原因。

我发现ModelBatch.begin(…)将通过调用Gdx.gl.glDisable(GL20.gl_BLEND)禁用混合。因此,请确保在调用ModelBatch.begin()后启用混合


Source

您使用的混合函数是什么<代码>glBlendFunc(GL_SRC_ALPHA,GL_ONE_减去GL_SRC_ALPHA)?在渲染第一帧之前是否正确清除了alpha通道?是的,create()中的glBlendFunc会执行此操作,特别是:“Gdx.gl20.glBlendFunc(gl20.GL_SRC_alpha,L20.GL_ONE_减去_SRC_alpha);”我正在使用SpriteBatch渲染网格后面的字体。glBlendFunc包含在SpriteBatch内部,看起来这就是为什么所有其他帧都很好的原因。你可以把你所说的作为回答,我会接受的。Thanks@Jakob您可以自己回答这个问题,这样您就可以将其标记为已解决。谢谢
    Gdx.gl20.glClearColor(0, 0, 0, 1);
    Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

    Gdx.gl20.glEnable(GL20.GL_BLEND);
    MeshManager_colorFill.meshShader.begin();
    MeshManager_colorFill.meshShader.setUniformMatrix("u_worldView", Snappr.camMatrix);

    meshArray_colorFill.render(MeshManager_colorFill.meshShader, GL20.GL_TRIANGLE_FAN, 0, meshArray_colorFill.get(i).getNumVertices()); 

    MeshManager_colorFill.meshShader.end();
    Gdx.gl20.glDisable(GL20.GL_BLEND);
  public static final String meshVertexShader_colorFill =

                    "attribute vec2 a_position;    \n" + 
                    "uniform mat4 u_worldView;\n" + 
                    "void main()                  \n" + 
                    "{                            \n" + 
                    "   gl_Position =  u_worldView * vec4(a_position.xy, 0, 1);  \n"      + 
                    "}                            \n" ;

  public static final String meshFragmentShader_colorFill =

                    "precision mediump float;\n" +  
                    "void main()                                  \n" + 
                    "{                                            \n" + 
                    "  gl_FragColor = vec4(1,1,1,0.2);\n" +
                    "}";
modelBatch.begin(camera); // resets Blending to false
// enable Blending
Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
// draw mesh
mesh.render(shader, GL20.GL_TRIANGLES);
modelBatch.end();