Comment rendre un PNG avec transparence dans LibGDX?

12

Je construis un exemple simple de tic-tac-toe avec LibGDX. J'ai des images simples: croix, cercle et planche, toutes pngcréées avec GIMP avec un fond transparent.

Comment puis-je les rendre Textureavec une transparence?

J'ai essayé avec la fonction d'activation GL10, mais cela ne semble pas fonctionner.

Vokail
la source
Avez-vous mis cela dans votre code: Gdx.gl.glClearColor (1, 1, 1, 1); Gdx.gl.glClear (GL10.GL_COLOR_BUFFER_BIT);
LeSam
mettre cela dans la boucle de rendu
LeSam
Cela devrait bien fonctionner (pour moi). Quel problème spécifique avez-vous rencontré?
ashes999
Votre déclaration: "J'ai des images simples: croix, cercle et bord tous les pngs créés avec gimp avec alpha comme couleur." pourrait être interprété de différentes manières, de la transparence des touches de couleur à l'alpha pré-multiplié. Pouvez-vous clarifier ce que vous voulez dire? Généralement, vous aurez besoin d'un mélange alpha (transparence alpha) ou d'un test alpha (masque alpha); aucune de ces choses n'est activée par défaut et la seconde n'est pas prise en charge dans OpenGL moderne.
Andon M. Coleman

Réponses:

2

Créez Sprite et affectez-lui une texture, puis utilisez Sprite setColor pour ajuster son alpha, comme ça,

Texture yourTexture = new Texture("image.png");
sprite = new Sprite(yourTexture);
//RGBA
sprite.setColor(1, 0, 0, 0.2f);

et dans la boucle render () utilisez SpriteBatch

sprite.draw(spriteBatch);
daniel
la source
Notez que SpriteBatch utilise DefaultShader, si vous souhaitez que vous puissiez écrire votre propre shader pour contrôler la transparence, et bien sûr, vous devez activer OpenGL ES 2.0 pour cela.
daniel
1

Si vous mettez

Gdx.gl.glClearColor(0, 0, 0, 1); 
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

au début de votre boucle render () devrait rafraîchir l'écran avec la couleur noire. Donc, si des images sont transparentes, elles seront visibles.

donc votre boucle render () pourrait ressembler à ceci

public void render(float delta) {
  Gdx.gl.glClearColor(0, 0, 0, 1);
  Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

  // Update logic & etc.        

  batch.begin();

  // Place your render calls
  // In this I use a Sprite object named "sprite" and all you need to do is call .draw();
  // on it and it will render at 0,0, unless told differently with .setPosition();

  sprite.draw(batch);

  batch.end();              
}
CNIAngel
la source
0

J'ai également essayé de rendre un .png avec transparence. Avec la configuration de base (mélange non activé), le rendu n'était pas correct.

Je n'ai jamais activé le mélange, mais j'ai ajouté ceci:

Gdx.gl.glClear(GL20.GL_ALPHA_BITS);

Mon problème était que l'alpha n'a jamais été effacé. Ce qui signifie que si je rendais avec 0,1 alpha, il faudrait 10 images jusqu'à ce que l'alpha soit "empilé" jusqu'à 1. L'ajout de l'appel ci-dessus effaçait l'alpha, tout comme vous effaceriez la couleur.

Je sais que c'est une vieille question, donc les solutions étaient alors différentes. enableBlending devrait toujours fonctionner, mais je ne suis pas sûr que cela empêche le "stacking" d'alpha. Effacer les bits alpha est probablement le moyen le plus simple d'empêcher l'aspect solide.

Quant au rendu réel, c'est le même que toujours.

//Viewport, camera, logic, etc
batch.begin();
//draw your image(s) here
batch.end();

la source