我使用ShapeRenderer绘制了一个填充圆圈,现在我想将此圆绘制为透明圆圈。我使用以下代码来做到这一点:但圆圈并不是透明的。此外,我检查了libgdx API,并从维基,它说,需要创建CameraStrategy。有人曾经遇到过类似的问题吗?如果是这样,请给我一些线索。提前谢谢。
Gdx.gl.glEnable(GL10.GL_BLEND);
Gdx.gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
drawFilledCircle();
Gdx.gl.glDisable(GL10.GL_BLEND);
private void drawFilledCircle(){
shapeRenderer.setProjectionMatrix(camera.combined);
shapeRenderer.begin(ShapeType.FilledCircle);
shapeRenderer.setColor(new Color(0, 1, 0, 1));
shapeRenderer.filledCircle(470, 45, 10);
shapeRenderer.end();
}
答案 0 :(得分:80)
在这种情况下,以下代码对我有用,也许它可以帮助其他人:
Gdx.gl.glEnable(GL10.GL_BLEND);
Gdx.gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
shapeRenderer.setProjectionMatrix(camera.combined);
shapeRenderer.begin(ShapeType.FilledCircle);
shapeRenderer.setColor(new Color(0, 1, 0, 0.5f));
shapeRenderer.filledCircle(470, 45, 10);
shapeRenderer.end();
Gdx.gl.glDisable(GL10.GL_BLEND);
答案 1 :(得分:12)
首先我们需要启用混合:
Gdx.gl.glEnable(GL10.GL_BLEND);
确保您不会在该行代码和SpriteBatch.begin()
代码行之间调用SpriteBatch.end()
和Shaperender.drawSomething()
。我不知道为什么,但这就是我的情况
答案 2 :(得分:5)
嗯,绘制完全透明的东西并不是真的有意义。如果您确实要制作半透明圆圈,则必须在每帧之前按glClearColor
清除颜色缓冲区,并将Color
alpha分量设置为0.5f
。
如果你不清除缓冲区,在几次渲染绘制之后,圆圈会混合成一个几乎是纯色的圆圈。
private void drawFilledCircle(Camera camera){
Gdx.gl.glClearColor(0, 0, 0, 0);
Gdx.gl.glClear( GL10.GL_COLOR_BUFFER_BIT );
shapeRenderer.setProjectionMatrix(camera.combined);
shapeRenderer.begin(ShapeType.FilledCircle);
shapeRenderer.setColor(new Color(0, 1, 0, 0.5f)); // last argument is alpha channel
shapeRenderer.filledCircle(470, 45, 10);
shapeRenderer.end();
}
答案 3 :(得分:5)
只有这对我有用:
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
//Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); // <<< this line here makes the magic we're after
game.shapeRenderer.setProjectionMatrix(camera.combined);
game.shapeRenderer.begin(ShapeType.Filled);
go.drawShapes();
game.shapeRenderer.end();
//Gdx.gl.glDisable(GL20.GL_BLEND);