Wie rendere ich eine PNG mit Transparenz in LibGDX?

12

Ich baue ein einfaches Tic-Tac-Toe-Beispiel mit LibGDX. Ich habe einfache Bilder: Kreuz, Kreis und Brett, alle pngmit GIMP mit einem transparenten Hintergrund erstellt.

Wie kann ich sie Texturemit Transparenz rendern ?

Ich habe es mit der GL10-Aktivierungsfunktion versucht, aber sie scheint nicht zu funktionieren.

Vokail
quelle
Haben Sie dies in Ihren Code eingefügt: Gdx.gl.glClearColor (1, 1, 1, 1); Gdx.gl.glClear (GL10.GL_COLOR_BUFFER_BIT);
LeSam
Geben Sie
Es sollte gut funktionieren (tut es für mich). Auf welches spezifische Problem sind Sie gestoßen?
Asche999
Ihre Aussage: "Ich habe einfache Bilder: Kreuze, kreise und brette alle mit Gimp mit Alpha als Farbe erstellten Pngs an." kann auf viele verschiedene Arten interpretiert werden, von Farbschlüsseltransparenz bis zu vormultipliziertem Alpha. Können Sie klarstellen, was Sie meinen? Im Allgemeinen benötigen Sie entweder Alpha-Blending (Alpha-Transparenz) oder Alpha-Testing (Alpha-Maske). Keines dieser Dinge ist standardmäßig aktiviert und das zweite wird in modernen OpenGL nicht unterstützt.
Andon M. Coleman

Antworten:

2

Erstellen Sie ein Sprite und weisen Sie ihm eine Textur zu. Passen Sie dann mit Sprite setColor das Alpha wie folgt an:

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

und in der render () Schleife SpriteBatch verwenden

sprite.draw(spriteBatch);
Daniel
quelle
Beachten Sie, dass SpriteBatch DefaultShader verwendet. Wenn Sie möchten, dass Sie einen eigenen Shader schreiben, um die Transparenz zu steuern, sollten Sie dafür OpenGL ES 2.0 aktivieren.
Daniel
1

Wenn Sie setzen

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

Am Anfang Ihrer render () -Schleife sollte der Bildschirm mit der Farbe Schwarz aktualisiert werden. Wenn also Bilder Transparenz enthalten, wird dies auffallen.

Ihre render () - Schleife würde also möglicherweise so aussehen

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
quelle
0

Ich habe versucht, eine .png-Datei auch mit Transparenz zu rendern. Bei der Grundeinstellung (Blending nicht aktiviert) wurde nicht richtig gerendert.

Ich habe das Mischen nie aktiviert, aber Folgendes hinzugefügt:

Gdx.gl.glClear(GL20.GL_ALPHA_BITS);

Mein Problem war, dass das Alpha nie gelöscht wurde. Das bedeutet, wenn ich mit 0,1 Alpha gerendert habe, würde es 10 Frames dauern, bis das Alpha wieder auf 1 "gestapelt" wurde.

Ich weiß, dass dies eine alte Frage ist, daher waren die Lösungen damals unterschiedlich. enableBlending sollte immer noch funktionieren, aber ich bin nicht sicher, ob dies das "Stapeln" von Alpha verhindert. Das Löschen der Alpha-Bits ist wahrscheinlich der einfachste Weg, um das solide Aussehen zu verhindern.

Das eigentliche Rendering ist das gleiche wie immer.

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

quelle