我遇到glReadPixels / ScreenUtils.getFrameBufferPixmap()的问题,在不透明的上面画出的半透明精灵似乎“覆盖”透明度,导致混乱。
在瓷砖顶部绘制具有10%透明度的黑色精灵,看起来像阴影。
原创(游戏中)图片:
使用ScreenUtils.getFrameBufferPixmap(...)中的glReadPixels获取的图像:
(阴影是白色的,因为它们略微透明)
如何在getFrameBufferPixmap()中正确地进行alpha混合?
答案 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
。