【问题标题】:LibGdx ShaderProgram for water break my graphic codeLibGdx ShaderProgram 用于破水我的图形代码
【发布时间】:2016-10-02 13:33:07
【问题描述】:

我正在用 libGDX 制作 2D 游戏。 它运行良好,看起来像这样:

现在我正在寻找一些水渲染器,我发现了一些很棒的东西:tutorial,它运行良好。 但是,当我依次渲染我的游戏然后是“水效果”时,画水的行为真的会像这样破坏我的图形: 所有块都与其他块发生变化,我有令人毛骨悚然的动画。而且我不知道是什么问题..

我使用 spriteBatch.draw(...); 渲染我的所有游戏;对于水:

`//RENDER WATER 
 Gdx.gl20.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);        
 Gdx.gl20.glEnable(GL20.GL_BLEND); 
 texture2.bind(1); // traitement that break the code
 texture3.bind(2); 
 shader.begin(); 
 shader.setUniformMatrix("u_worldView", matrix); 
 shader.setUniformi("u_texture", 1); 
 shader.setUniformi("u_texture2", 2); 
 shader.setUniformf("timedelta", -angle); 
 waterMesh.render(shader, GL20.GL_TRIANGLE_FAN); 
 shader.end();`

实际上,我想知道如何告诉 LibGdx 在末尾简单地应用“水效果”,但不影响屏幕上已有的内容。

谢谢!

【问题讨论】:

  • 我猜你以错误的顺序应用了一些东西,或者错过了一些限制对教程中的某些部分生效的步骤。但是您确实必须向某人显示相关代码才能弄清楚。
  • 我使用 spriteBatch.draw(...); 渲染我所有的游戏,而对于水://RENDER WATER Gdx.gl20.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); Gdx.gl20.glEnable(GL20.GL_BLEND); texture2.bind(1); texture3.bind(2); shader.begin(); shader.setUniformMatrix("u_worldView", matrix); shader.setUniformi("u_texture", 1); shader.setUniformi("u_texture2", 2); shader.setUniformf("timedelta", -angle); waterMesh.render(shader, GL20.GL_TRIANGLE_FAN); shader.end();
  • 没有'texture2.bind(1); texture3.bind(2);',水的位置有黑条是正常的。但是有了这两行(也只有第一行),我得到了我加载的结果。
  • 请使用神奇的edit 按钮。代码在 cmets 中不可读。

标签: java opengl libgdx 2d shader


【解决方案1】:

SpriteBatch 假设 GL 状态已保留为默认值,在这种情况下,当您绑定多个纹理时,您不会将活动纹理单元保留为 0,因此 SpriteBatch 没有为您的精灵使用正确的纹理.

spriteBatch.begin() 之前致电Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0); 以解决此问题。

【讨论】:

    猜你喜欢
    • 2017-12-22
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多