Рисование прозрачного ShapeRenderer в libgdx

Я нарисовал заполненный круг, используя ShapeRenderer, и теперь я хочу нарисовать этот круг как прозрачный. Для этого я использую следующий код: Но круг не станет прозрачным. Кроме того, я проверил API-интерфейс libgdx и из вики, он говорит, что необходимо создать 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(); } 

Solutions Collecting From Web of "Рисование прозрачного ShapeRenderer в libgdx"

Следующий код работает для меня в этом случае, возможно, это поможет кому-то еще:

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

И убедитесь, что вы не вызываете SpriteBatch.begin() и SpriteBatch.end() между этой строкой кода и вашей Shaperender.drawSomething() . Я не знаю, почему, но это то, что работает в моем случае

Ну, на самом деле нет смысла рисовать что-то полностью прозрачное. Если вы хотите сделать половину прозрачного круга, вам нужно очистить цветной буфер 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);