java - 我需要什么混合模式才能通过在图像上绘制透明图像来使图像更透明?

标签 java opengl libgdx blending

这张图解释了我的目标:

blending

基本上,我有一个帧缓冲区,我想通过在其上绘制全屏形状来使其内容更加透明。这个形状的颜色将不起作用。 我已使用以下代码尝试过此操作:

// sr is ShapeRenderer
// fbo is FrameBufferObject

fbo.begin();

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

sr.begin(ShapeRenderer.ShapeType.Filled);

Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
sr.setColor(1, 1, 1, 1);
sr.circle(0, 0, 1);

Gdx.gl.glBlendFuncSeparate(GL20.GL_ZERO, GL20.GL_ONE, GL20.GL_ZERO, GL20.GL_ONE_MINUS_SRC_ALPHA);
sr.setColor(0, 0, 0, .5f);
sr.rect(0, 0, width, height);

sr.end();
fbo.end();

我得到了一个透明的黑色圆圈,而不是正常工作,即使缓冲区没有刷新,它也会变得越来越透明。我期望的是一个透明的白色圆圈。

我预计会发生这种混合:

R = Rsrc * 0 + Rdst * 1
G = Gsrc * 0 + Gdst * 1
B = Bsrc * 0 + Bdst * 1
A = Asrc * 0 + Adst * (1 - 0.5)

有谁知道如何让它正常工作?

最佳答案

ShapeRenderer 不知道您正在更改 blendfunc,因此您正在使用您设置的第二个 blendfunc 绘制圆形和正方形。你需要在两者之间冲洗它。

关于java - 我需要什么混合模式才能通过在图像上绘制透明图像来使图像更透明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57207562/

相关文章:

c++ - Glew 问题, Unresolved external 问题

java - 矩形内的 libgdx 动画 - 碰撞检测 - 矩形

java - 如何获取 libgdx 中平铺 map 单元格的位置

java - java Canvas 上耗时

c++ - GLUT 键盘事件

java - 如何将回历(伊斯兰)日期转换为公历日期

c++ - 创建 OpenGL 对象期间出错

libgdx - 使用一个 ttf 文件的多个位图字体

java - 如何调整 GridLayout 中 JComponent 的大小?

java - 如何读取 XML 文件并将其作为 reSTLet 中的响应发送