Transparencias con Allegro 5

 


La librería Allegro 5 permite el manejo de imágenes en formato PNG, lo cual permite imágenes con transparencias, cosa que no permitía la versión 4 de Allegro. Pero en este ejemplo se realiza la transparencia de la imagen mediante comandos.

Para crear las transparencias de este ejemplo en Allegro 5, se utilizarán los siguientes comandos: al_set_blender, al_draw_tinted_bitmap_region.  

COMANDOS

al_set_blender

void al_set_blender(int op, int src, int dst)


Establece la función que se utilizará para mezclar las imagenes.

Combinando los colores de origen y destino según la función especificada.

El primer parámetro op, indicará la formula a utilizar por Allegro.

ALLEGRO_ADD
ALLEGRO_DEST_MINUS_SRC
ALLEGRO_SRC_MINUS_DEST

En el segundo y tercer parámetro los valores válidos son:

ALLEGRO_ZERO
ALLEGRO_ONE
ALLEGRO_ALPHA
ALLEGRO_INVERSE_ALPHA

Para mas información sobre este comando visite el manual de allegro 5.


al_draw_tinted_bitmap_region


void al_draw_tinted_bitmap_region(ALLEGRO_BITMAP *bitmap,
   ALLEGRO_COLOR tint,
   float sx, float sy, float sw, float sh, 

   float dx, float dy, int flags)


Dibuja una región del mapa de bits dado en el mapa de bits de destino.

Parámetros: 

  • sx - fuente x
  • sy - fuente y
  • sw - ancho de la región
  • sh - altura de la región
  • dx - destino x
  • dy - destino y
  • flags - puede tener varios valores:
    • 0 - Lo dibuja tal cual.
    • ALLEGRO_FLIP_HORIZONTAL - gira la imagen de forma horizontal
    • ALLEGRO_FLIP_VERTICAL - gira la imagen de forma vertical

Para mas información sobre este comando visite el manual de allegro 5.


NUESTRO EJEMPLO


En el ejemplo tenemos lo siguiente:

  1. al_set_blender(ALLEGRO_ADD, ALLEGRO_ZERO, ALLEGRO_INVERSE_ALPHA );
  2. al_draw_tinted_bitmap_region(personaje, al_map_rgba_f(1, 1, 1, 0.3), paso * 48, dir * 48, 48, 48, x, y+46 , ALLEGRO_FLIP_VERTICAL);
  3. al_draw_tinted_bitmap_region(personaje, al_map_rgba_f(1, 1, 1, 0.2), paso * 48, dir * 48, 48, 48, 802-x + 48, y+46, 3);
  4. al_set_blender(ALLEGRO_ADD, ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA);
  5. al_draw_tinted_bitmap_region(personaje, al_map_rgba_f(1, 1, 1, 0.80), paso * 48, dir * 48, 48, 48, 802-x + 48, y, ALLEGRO_FLIP_HORIZONTAL);
  6. al_draw_bitmap_region(personaje, paso * 48, dir * 48, 48, 48, x, y, 0);

Este trozo de código se encarga de dibujar al personaje, su sombra, su reflejo y la sombra del reflejo.

La primera línea de código hace que se añade el color negro a la imagen, manteniendo la transparencia.

La segunda y tercera línea se encargan de dibujar las sombras. Con este comando se esta troceando una imagen que contiene la animación del personaje, de manera que dependiendo de las variables paso y dir se obtiene un trozo concreto de la imagen con el tamaño de 48x48, y además se le está indicando mediante  al_map_rgba_f(1, 1, 1, 0.3)  el grado de transparencia, que viene indicado por el 0.3. Esto indica que esta a un 30% de visibilidad. Añadiéndole el parámetro ALLEGRO_FLIP_VERTICAL indicamos que la imagen se voltea en vertical.

Para poder utilizar las transparencias podemos utilizar cualquier comando que incluya la palabra tinted, como por ejemplo al_draw_tinted_bitmap.

La cuarta línea de código cambia el funcionamiento para que se pinte normal.

En la quinta línea se encarga de dibujar el reflejo del personaje, al cual pone algo transparente (concretamente un 80%  de opacidad), se gira la imagen de forma horizontal.

Y en la sexta línea de código se dibuja al personaje, según paso y dir, con un tamaño de 48x48, en la posición x,y.



SHARE
    Blogger Comment

0 comentarios:

Publicar un comentario