gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:06:19 25 4
gpt4 key购买 nike

我正在使用 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" +
"}";

如何按应有的方式渲染第一帧?

谢谢

最佳答案

create() 中的 glBlendFunc 可以解决这个问题,特别是:“Gdx.gl20.glBlendFunc(GL20.GL_SRC_ALPHA, L20.GL_ONE_MINUS_SRC_ALPHA);”我正在使用 SpriteBatch 在网格之后渲染字体。 glBlendFunc 包含在 SpriteBatch 内部,看起来这就是所有其他帧都正常的原因。

关于android - libgdx - 着色器忽略第一帧中的混合/alpha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21662667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com