【发布时间】:2019-07-25 17:43:39
【问题描述】:
这张图片说明了我的目标:
基本上,我有一个帧缓冲区,我想通过在其上绘制全屏形状来使其内容更加透明。这种形状的颜色将不起作用。 我已经使用以下代码进行了尝试:
// 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)
有谁知道如何使它正常工作?
【问题讨论】:
-
如果有人想知道:我试图创建一条逐渐被清除的线索。
标签: java opengl libgdx blending