tutorial studio games java android libgdx

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