¿Cómo renderizo un PNG con transparencia en LibGDX?


12

Estoy creando un ejemplo simple de tres en raya con LibGDX. Tengo imágenes simples: cruz, círculo y tablero, todas pngcreadas con GIMP con un fondo transparente.

¿Cómo puedo renderizarlos como Texturecon transparencia?

He intentado con la función de activación GL10, pero parece que no funciona.


¿Ha puesto esto en su código: Gdx.gl.glClearColor (1, 1, 1, 1); Gdx.gl.glClear (GL10.GL_COLOR_BUFFER_BIT);
LeSam

poner esto en el bucle de renderizado
LeSam

Debería funcionar bien (lo hace para mí). ¿Qué problema específico te encontraste?
cenizas999

Su declaración: "Tengo imágenes simples: cruz, círculo y tabla todos los png creados con gimp con alfa como color". podría interpretarse de muchas maneras diferentes, desde la transparencia de la clave de color hasta el alfa pre-multiplicado. ¿Puedes aclarar a qué te refieres? En general, necesitará una combinación alfa (transparencia alfa) o una prueba alfa (máscara alfa); ninguna de estas cosas está habilitada de forma predeterminada y la segunda no es compatible con OpenGL moderno.
Andon M. Coleman

Respuestas:



2

Cree Sprite y asígnele Textura, luego use Sprite setColor para ajustar su alfa, así,

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

y en el bucle render () usa SpriteBatch

sprite.draw(spriteBatch);

Tenga en cuenta que SpriteBatch usa DefaultShader, si desea puede escribir su propio sombreador para controlar la transparencia y, por supuesto, debe habilitar OpenGL ES 2.0 para eso.
daniel

1

Si pones

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

Al comienzo de su ciclo de render () se debe actualizar la pantalla con el color negro. Entonces, si alguna imagen tiene transparencia, será notable.

para que tu bucle render () se vea así

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

0

Traté de renderizar un .png con transparencia también. Con la configuración básica (mezcla no activada) no se procesó correctamente.

Nunca activé la mezcla, pero agregué esto:

Gdx.gl.glClear(GL20.GL_ALPHA_BITS);

Mi problema fue que el alfa nunca se borró. Es decir, si renderizo con 0.1 alfa, tomaría 10 cuadros hasta que el alfa se "apilara" de nuevo a 1. Agregar la llamada anterior borró el alfa, al igual que borraría el color.

Sé que esta es una vieja pregunta, por lo que las soluciones eran diferentes. enableBlending aún debería funcionar, pero no estoy seguro de si esto evita el "apilamiento" de alfa. Borrar los bits alfa es probablemente la forma más fácil de evitar el aspecto sólido.

En cuanto a la representación real, eso es lo mismo de siempre.

//Viewport, camera, logic, etc
batch.begin();
//draw your image(s) here
batch.end();
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.