【发布时间】: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();
我想在缓冲区内呈现应有的形状。有人知道如何进行这项工作吗?
【问题讨论】: