Рисование прозрачного 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();
}
Ответы
Ответ 1
В этом случае для меня работает следующий код: возможно, это поможет кому-то другому:
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);
Ответ 2
Сначала нам нужно включить blending:
Gdx.gl.glEnable(GL10.GL_BLEND);
И убедитесь, что вы не вызываете SpriteBatch.begin()
и SpriteBatch.end()
между этой строкой кода и вашей строкой Shaperender.drawSomething()
. Я не знаю, почему, но то, что работает в моем случае
Ответ 3
Ну, на самом деле нет смысла рисовать что-то полностью прозрачное. Если вы хотите сделать полупрозрачный круг, вам нужно очистить цветной буфер glClearColor
перед каждым фреймом и установить Color
альфа-компонент в 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();
}
Ответ 4
Только это сработало для меня:
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);