java - studio - Dibujar ShapeRenderer transparente en libgdx
libgdx ubuntu (4)
Dibujé un círculo lleno usando ShapeRenderer y ahora quiero dibujar este círculo como uno transparente. Estoy usando el siguiente código para hacer eso: pero el círculo no viene como transparente. Además, verifiqué la API de libgdx y, desde la wiki, dice que es necesario crear CameraStrategy. Alguien ha enfrentado un problema similar alguna vez? Si es así, por favor dame algunas pistas. Gracias por adelantado.
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();
}
Bueno, realmente no tiene sentido dibujar algo completamente transparente. Si desea hacer un círculo medio transparente, deberá borrar el búfer de color por glClearColor
antes de cada cuadro y establecer el componente Color
alfa en 0.5f
.
Si no borra el búfer, después de algunos sorteos, el círculo se combinaría en uno con un color casi sólido.
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();
}
Primero debemos habilitar la mezcla:
Gdx.gl.glEnable(GL10.GL_BLEND);
Y asegúrese de no llamar a SpriteBatch.begin()
y SpriteBatch.end()
entre esa línea de código y su línea de código Shaperender.drawSomething()
. No sé por qué, pero eso es lo que funciona en mi caso
Solo esto funcionó para mí:
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);
El siguiente código me funciona en este caso, tal vez ayudará a alguien más:
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);