【问题标题】:Strange behaviour of shaperenderer in libGDXlibGDX 中 shaperenderer 的奇怪行为
【发布时间】:2018-04-10 19:49:58
【问题描述】:

对于一些背景信息,我正在研究带有阴影的照明系统。我在尝试将深色透明色添加到缓冲区时遇到了问题。您会看到我正在使用缓冲区中的函数 renderOccluders(sr) 渲染形状。 (sr 是我的 ShapeRenderer。)这应该会导致向 FBO 添加一个透明的黑色层。它没有这样做,而是设置一个透明的黑色层。然而,一件非常奇怪的事情是,当我将用于绘制形状的代码行移动到缓冲区结束后,代码确实可以工作。看似在缓冲区中使用 shaperenderer 的结果与在缓冲区外使用它不同。

这是我的代码:

    cam.update();
    batch.setProjectionMatrix(cam.combined);
    sr.setProjectionMatrix(batch.getProjectionMatrix());

    Gdx.gl.glClearColor(1,0,0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    buffer.begin(); // Reason for buffer is that blending here is only meant for darkness and light

    Gdx.gl.glClearColor(1,1,1,1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    //renderDarkness();

    Gdx.gl.glEnable(GL20.GL_BLEND);
    Gdx.gl.glBlendFunc(770,771);
    sr.begin(ShapeRenderer.ShapeType.Filled);
    sr.setColor(0,0,0,.5f);

    for (Light light : crtLvl.lights) { light.renderOccluders(sr);}

    sr.end();
    Gdx.gl.glDisable(GL20.GL_BLEND);

    buffer.end();

    sprite_darknessOverlay = new Sprite(buffer.getColorBufferTexture());
    sprite_darknessOverlay.flip(false, true);
    sprite_darknessOverlay.setSize(newWidth,newHeight);
    sprite_darknessOverlay.setPosition(cam.position.x - newWidth / 2, cam.position.y - newHeight / 2);
    sprite_darknessOverlay.setColor(1,1,1,1);
    batch.begin();

    sprite_darknessOverlay.draw(batch);

    batch.end();

我想在缓冲区内呈现应有的形状。有人知道如何进行这项工作吗?

【问题讨论】:

    标签: opengl libgdx


    【解决方案1】:

    绘制到缓冲区时,请记住,混合方程的 alpha 部分突然变得很重要,因为它稍后将用于将缓冲区绘制到屏幕上。通常等式的 alpha 部分无关紧要,因为后台缓冲区的最终 alpha 不用于任何事情。由于它通常无关紧要,因此您通常可以简单地使用 blendFunc 而不是 blendFuncSeparate。

    在不知道如何进行照明的更多细节的情况下,我只是建议您使用带有 alpha 1 的清晰颜色,并且在绘制到帧缓冲区时,使用 batch.setBlendFuncSeparate() 并将 alpha 参数设置为GL_ONE,GL_ZERO。然后在将帧缓冲区的图像绘制到屏幕上时,将其颜色的 alpha 设置为所需的透明度。对于您具体尝试做的事情,这可能是错误的,但应该让您开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 2017-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多