我正在使用alpha颜色小于1.0的着色器渲染libgdx网格。
渲染第一帧时,在着色器中设置的alpha值被忽略并呈现为1.0。以下所有渲染帧都可以。
在上一个使用glDrawArrays绘制线条和形状的项目中,我发生了同样的事情,但我还没有找到解决方案。
libgdx中的代码render()循环:
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);
我的着色器(在create(){}中编译):
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" +
"}";
如何渲染第一帧?
由于
答案 0 :(得分:0)
create()中的glBlendFunc可以解决问题,特别是:“Gdx.gl20.glBlendFunc(GL20.GL_SRC_ALPHA,L20.GL_ONE_MINUS_SRC_ALPHA);”我正在使用SpriteBatch在网格后面渲染字体。 glBlendFunc包含在SpriteBatch内部,看起来就是为什么所有其他帧都没问题。
答案 1 :(得分:0)
我发现 ModelBatch.begin(...) 将通过调用 Gdx.gl.glDisable(GL20.GL_BLEND) 禁用混合。因此,请确保在调用 ModelBatch.begin() 后启用混合。
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();