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

问题描述:

我使用alpha色彩小于1.0的着色器渲染libgdx网格。libgdx - 着色器忽略第一帧中的混合/ alpha

渲染第一帧时,设置在着色器中的alpha值被忽略并呈现为1.0。所有以下渲染帧都很好。

在我之前使用glDrawArrays绘制线条和形状时发生过同样的情况,我还没找到解决方案。

守则libgdx渲染()循环:

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" + 
        "}"; 

如何渲染的第一帧,因为它应该是?

由于

+2

你用什么混合函数? 'glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);'?您是否在渲染第一帧之前正确清除Alpha通道? – LumpN

+0

是的,glBlendFunc在create()方法中,具体如下: “Gdx.gl20.glBlendFunc(GL20.GL_SRC_ALPHA,L20.GL_ONE_MINUS_SRC_ALPHA);” 我正在使用SpriteBatch渲染一个字体,在网格之后。 glBlendFunc包含在SpriteBatch的内部,看起来就是为什么所有其他帧都很好。 你可以张贴你说的答案,我会接受它。 谢谢 – Jayco

+0

@Jakob你可以自己回答这个问题,所以你可以把它标记为已解决。谢谢 – Springrbua

glBlendFunc在创建()是卓有成效的,特别是: “Gdx.gl20.glBlendFunc(GL20.GL_SRC_ALPHA,L20.GL_ONE_MINUS_SRC_ALPHA);”我使用SpriteBatch在网格之后渲染字体。 glBlendFunc包含在SpriteBatch的内部,看起来就是为什么所有其他帧都很好。