【发布时间】:2015-07-08 18:39:08
【问题描述】:
我正在尝试混合两个圆圈,一个是黑色的,另一个是白色的。它们相交的部分必须是灰色的。 我尝试使用混合函数,但没有得到预期的结果。
目标是只混合这两个元素,其他元素(如背景)不能在那里混合,我不知道如何保持 100% 的 alpha 通道。
这是我当前的渲染代码,circle1 和 circle2 是 TextureRegion。
public void draw(Batch batch, float parentAlpha) {
super.draw(batch, parentAlpha);
batch.enableBlending();
batch.setBlendFunction(GL20.GL_ONE, GL20.GL_ONE);
batch.draw(circle1, c1.getX(), getY(), getWidth(), getHeight());
batch.draw(circle2, c2.getX(), getY(), getWidth(), getHeight());
}
这是一个颜色混合的例子。
编辑:问题已解决。 我用Spritebatch做了一个测试,我画了第三个不透明度降低的圆圈,这是用于测试的代码和结果:
Gdx.gl20.glEnable(GL20.GL_BLEND);
Gdx.gl20.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
shapeRenderer.setProjectionMatrix(camera.combined);
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
shapeRenderer.setColor(1, 1, 1, 1f);
shapeRenderer.circle(15, 5, 5);
shapeRenderer.setColor(0, 0, 0, 1f);
shapeRenderer.circle(19, 5,5);
shapeRenderer.setColor(1, 1, 1, 0.5f);
shapeRenderer.circle(15, 5, 5);
shapeRenderer.end();
Gdx.gl20.glDisable(GL20.GL_BLEND);
【问题讨论】:
-
看起来您希望顶部圆圈和底部圆圈之间的混合与顶部圆圈和紫色背景之间的混合不同。我能想到的最简单的方法是在第二个圆圈之后再次绘制第一个圆圈,但不透明度会降低。并保留GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA的默认混合函数。
-
这解决了我的问题!我将使用解决方案编辑帖子