在libgdx中绘制透明的ShapeRenderer

我有一个使用ShapeRenderer绘制一个实心圆,现在我想绘制这个圆作为一个透明的。 我正在使用下面的代码来做到这一点:但圆圈不透明。 另外,我检查了libgdx API,并从wiki中得知,需要创buildCameraStrategy。 有人曾经遇到类似的问题吗? 如果是这样,请给我一些线索。 提前致谢。

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(); } 

Solutions Collecting From Web of "在libgdx中绘制透明的ShapeRenderer"

在这种情况下,下面的代码正在为我工​​作,也许它会帮助别人:

 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); 

首先我们需要启用混合:

 Gdx.gl.glEnable(GL10.GL_BLEND); 

并确保您不要在该行代码和Shaperender.drawSomething()行代码之间调用SpriteBatch.begin()SpriteBatch.end() 。 我不知道为什么,但这是我的情况

那么,绘制一些完全透明的东西是没有意义的。 如果你想做一个半透明的圆形,你必须在每帧之前用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(); } 

只有这对我有用:

 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);