LibGDX / OpenGL - glReadPixels透明度问题

时间:2016-09-02 01:11:51

标签: opengl libgdx alpha-transparency glreadpixels

我遇到glReadPixels / ScreenUtils.getFrameBufferPixmap()的问题,在不透明的上面画出的半透明精灵似乎“覆盖”透明度,导致混乱。

在瓷砖顶部绘制具有10%透明度的黑色精灵,看起来像阴影。

原创(游戏中)图片:

Normal shadows.

使用ScreenUtils.getFrameBufferPixmap(...)中的glReadPixels获取的图像:

(阴影是白色的,因为它们略微透明)

如何在getFrameBufferPixmap()中正确地进行alpha混合?

1 个答案:

答案 0 :(得分:0)

您需要使用glBlendFuncSeparate而不是glBlendFunc,这是SpriteBatch使用的。 SpriteBatch使用glBlendFuncSeparate提供后门(我认为由于某些原因未记录)。将它的混合函数参数设置为-1,然后您可以手动设置自己的glBlendFuncSeparate,它始终将帧缓冲区的alpha保留为1.0:

spriteBatch.setBlendFunction(-1, -1);
Gdx.gl.glBlendFuncSeparate(
    GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, GL20.GL_ZERO, GL20.GL_ONE);
//...
spriteBatch.begin();
//...
spriteBatch.end();

同时确保glClearColor的字母为1.0f