viernes, 23 de marzo de 2012

Transparencias en Allegro 5


Después de echarle un vistazo al excelente post de Juan Pablo sobre cómo pasar de la versión 4 a la 5 de Allegro he estado trasteando un poco con la programación de algunos de mis juegos y hay algunas cosas que querría comentar con vosotros.
En concreto, en este post, voy a hablaros sobre las transparencias en Allegro5.



Color mágico o color transparente

En la versión 4, cuando queríamos pintar un bitmap con alguna de sus partes transparentes, utilizábamos el llamado "magic pink" o color fucsia, ya que los pixels de éste color no se pintaban. En la versión 5 de Allegro no existe ningún color mágico, si no que debemos declararlo explícitamente. Para ello utilizaremos la función "al_convert_mask_to_alpha" con la que le diremos a Allegro que el color dado (máscara) se convertirá en el canal alpha (transparente) de la imagen. La ventaja de esto es que podemos definir como transparente cualquier color que queramos; la desventaja es que deberemos hacerlo para cada bitmap que tengamos.
Prototipo de la función:
void al_convert_mask_to_alpha(ALLEGRO_BITMAP *bitmap, ALLEGRO_COLOR mask_color);
Uso de la función (si queremos hacer transparente el color fucsia como en Allegro4):

ALLEGRO_BITMAP *bmp;
...
al_convert_mask_to_alpha(bmp, al_map_rgb(255,0,255));
al_draw_bitmap(bmp);

Dibujando transparencias

Vamos ahora con otro punto, en lo referente a transparencias. ¿Qué ocurre si lo que queremos es que una imagen entera se muestre transparente en un porcentaje dado? En ese caso haremos uso de la función "al_draw_tinted_bitmap".
Prototipo de la función:
void al_draw_tinted_bitmap(ALLEGRO_BITMAP *bitmap, ALLEGRO_COLOR tint,
float dx, float dy, int flags)

Uso de la función:
ALLEGRO_BITMAP *bmp;
float x, y;
x = y = 0.0;
...
al_set_blender(ALLEGRO_ADD, ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA);
...
al_draw_tinted_bitmap(bmp, al_map_rgba_f(1, 1, 1, 0.5), x, y, 0);

Con esto conseguimos pintar el bitmap 'bmp' en el display con una transparencia del 50%. Explicaremos esto un poco más a fondo. La funcion "al_set_blender" indica cómo se van a mezclar los pixels al hacer la composición. No vamos a extendernos en esto porque se quedaría fuera de este post, pero baste decir que esta sería la forma correcta de hacerlo. La función "al_draw_tinted_bitmap" pinta el bitmap "bmp" en el display, mezclando su color, pixel a pixel, con el color dado por " al_map_rgba_f(1, 1, 1, 0.5)" (por ello hemos tenido que decir antes cómo se mezclaran los colores). Los tres primeros parámetros son las componentes RGB y el cuarto es el alpha o transparencia. Sus valores se dan de 0 a 1, siendo 0.5 el 50% de la transparencia.

Originalmente posteado para AraGames.

No hay comentarios:

Publicar un comentario