【发布时间】:2014-03-06 22:13:30
【问题描述】:
我正在使用 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" +
"}";
如何按原样渲染第一帧?
谢谢
【问题讨论】:
-
你用的是什么混合函数?
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);?在渲染第一帧之前,您是否正确清除了 Alpha 通道? -
是的,create() 中的 glBlendFunc 可以解决问题,具体来说:“Gdx.gl20.glBlendFunc(GL20.GL_SRC_ALPHA, L20.GL_ONE_MINUS_SRC_ALPHA);”我正在使用 SpriteBatch 在网格之后渲染字体。 glBlendFunc 包含在 SpriteBatch 内部,看起来这就是所有其他帧都很好的原因。您可以发布您所说的作为答案,我会接受。谢谢
-
@Jakob 您可以自己回答这个问题,因此您可以将其标记为已解决。谢谢
标签: android opengl-es libgdx shader alpha