J'ai dessiné un cercle rempli à l'aide de ShapeRenderer et maintenant je veux dessiner ce cercle comme transparent. J'utilise le code suivant pour ce faire: Mais le cercle n'est pas aussi transparent. Aussi, j'ai vérifié l'API libgdx et du wiki, il est dit que, j'ai besoin de créer CameraStrategy. Quelqu'un a-t-il déjà rencontré un problème similaire? Si oui, donnez-moi quelques indices. Merci d'avance.
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();
}
Le code suivant fonctionne pour moi dans ce cas, peut-être qu'il aidera quelqu'un d'autre:
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);
Nous devons d'abord activer le mélange:
Gdx.gl.glEnable(GL10.GL_BLEND);
Et assurez-vous de ne pas appeler SpriteBatch.begin()
et SpriteBatch.end()
entre cette ligne de code et votre ligne de code Shaperender.drawSomething()
. Je ne sais pas pourquoi mais c'est ce qui fonctionne dans mon cas
seulement cela a fonctionné pour moi:
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);
Eh bien, il n'est pas vraiment utile de dessiner quelque chose de complètement transparent. Si vous vouliez créer un demi-cercle transparent, vous devez effacer le tampon de couleur de glClearColor
avant chaque image et définir Color
composant alpha sur 0.5f
.
Si vous ne vouliez pas effacer le tampon, après quelques tracés de rendu, le cercle se fondrait en un avec une couleur presque unie.
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();
}