web-dev-qa-db-fra.com

Dessin de ShapeRenderer transparent dans libgdx

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

}
39
UVM

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

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

12
Hải Phong

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

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();
}
5
jellyfication