Tutorial Allegro 5 #8 – Primitivas Gráficas

Padrão

Olá de novo, pessoas! Aqui estamos para mais um tutorial sobre a biblioteca Allegro 5! Dessa vez, vamos ver como utilizar o add-on allegro_primitives para desenharmos primitivas gráficas. Com ele, podemos facilmente desenhar linhas, retângulos, triângulos, círculos e até gráficos mais elaborados.

No exemplo, nossa aplicação exibe algumas formas de tempos e tempos e depois encerra. Vamos dar uma olhada no código:

#include <allegro5/allegro.h>
#include <allegro5/allegro_primitives.h>

#include <stdio.h>
#include <stdbool.h>

bool inicializar();

const int LARGURA_TELA = 640;
const int ALTURA_TELA = 480;

ALLEGRO_DISPLAY *janela = NULL;

int main(void)
{
    if (!inicializar())
    {
        return -1;
    }

    // Linha: x1, y1, x2, y2, cor, espessura
    al_draw_line(20.0, 40.0, 40.0, 60.0, al_map_rgb(255, 0, 0), 1.0);
    al_flip_display();

    al_rest(2.0);

    al_clear_to_color(al_map_rgb(0, 0, 0));
    al_flip_display();

    al_rest(0.5);

    // Triângulo: x1, y1, x2, y2, x3, y3, cor, espessura
    al_draw_triangle(70.0, 30.0, 20.0, 55.0, 110.0, 250.0, al_map_rgb(255, 255, 255), 5.0);
    al_flip_display();

    al_rest(2.0);

    al_clear_to_color(al_map_rgb(0, 0, 0));
    al_flip_display();

    al_rest(0.5);

    // Triângulo preenchido: x1, y1, x2, y2, x3, y3, cor
    al_draw_filled_triangle(40.0, 90.0, 120.0, 246.0, 400.0, 23.0, al_map_rgb(255, 255, 0));
    al_flip_display();

    al_rest(2.0);

    al_clear_to_color(al_map_rgb(0, 0, 0));
    al_flip_display();

    al_rest(0.5);

    // Retângulo: x1, y1, x2, y2, cor, espessura
    al_draw_rectangle(70.0, 30.0, 110.0, 250.0, al_map_rgb(255, 0, 255), 6.0);
    al_flip_display();

    al_rest(2.0);

    al_clear_to_color(al_map_rgb(0, 0, 0));
    al_flip_display();

    al_rest(0.5);

    // Retângulo preenchido: x1, y1, x2, y2, cor
    al_draw_filled_rectangle(88.0, 10.0, 340.0, 77.0, al_map_rgb(0, 255, 255));
    al_flip_display();

    al_rest(2.0);

    al_clear_to_color(al_map_rgb(0, 0, 0));
    al_flip_display();

    al_rest(0.5);

    // Elipse: x1, y1, raio x, raio y, cor, espessura
    al_draw_ellipse(70.0, 90.0, 20.0, 55.0, al_map_rgb(255, 255, 255), 5.0);
    al_flip_display();

    al_rest(2.0);

    al_clear_to_color(al_map_rgb(0, 0, 0));
    al_flip_display();

    al_rest(0.5);

    // Elipse preenchido: x1, y1, raio x, raio y, cor
    al_draw_filled_ellipse(98.0, 145.0, 25.0, 15.0, al_map_rgb(128, 255, 128));
    al_flip_display();

    al_rest(2.0);

    al_clear_to_color(al_map_rgb(0, 0, 0));
    al_flip_display();

    al_rest(0.5);

    // Círculo: x1, y1, raio, cor, espessura
    al_draw_circle(250.0, 300.0, 70.0, al_map_rgb(128, 0, 0), 2.0);
    al_flip_display();

    al_rest(2.0);

    al_clear_to_color(al_map_rgb(0, 0, 0));
    al_flip_display();

    al_rest(0.5);

    // Círculo preenchido: x1, y1, raio, cor
    al_draw_filled_circle(350.0, 50.0, 43.0, al_map_rgb(0, 0, 255));
    al_flip_display();

    al_rest(2.0);

    al_clear_to_color(al_map_rgb(0, 0, 0));
    al_flip_display();

    al_rest(0.5);

    al_destroy_display(janela);

    return 0;
}

bool inicializar()
{
    if (!al_init())
    {
        fprintf(stderr, "Falha ao inicializar a biblioteca Allegro.\n");
        return false;
    }

    if (!al_init_primitives_addon())
    {
        fprintf(stderr, "Falha ao inicializar add-on de primitivas.\n");
        return false;
    }

    janela = al_create_display(LARGURA_TELA, ALTURA_TELA);
    if (!janela)
    {
        fprintf(stderr, "Falha ao criar janela.\n");
        return false;
    }

    al_set_window_title(janela, "Testando allegro_primitives");

    return true;
}

O aplicativo segue a estrutura apresentada nos posts anteriores. A novidade é a função al_init_primitives_addon(), necessária para o uso das funcionalidades do add-on de primitivas. Já no corpo do nosso programa, temos algumas funções que desenham primitivas gráficas mais simples. Estas funções (e algumas outras) são classificadas como rotinas de desenho de alto nível. Através delas, é possível desenhar as formas através da especificação de coordenadas de localização e atributos de cores e formato. Este add-on também fornece rotinas de desenho de baixo nível, que consistem em funções para desenho de gráficos e formas geométricas mais elaboradas. Como o nosso tutorial não é tão profundo, não vou explorar tais funções (mas se quiser, você pode encontrar aqui no manual).

As funções utilizadas foram devidamente comentadas, para facilitar a compreensão dos parâmetros. Acredito que não há muito o que ser explicado, de forma que vocês devem experimentar os diversos parâmetros para compreenderem melhor seu funcionamento. A aplicação rodando resultará em algo mais ou menos assim:

Para compilar corretamente, ajuste o linker colocando as seguintes flags:

  • Windows: -lallegro-5.0.5-mt -lallegro_primitives-5.0.5-mt
  • Linux: -lallegro -lallegro_primitives

Por hoje é só! Até a próxima! 😀

Um comentário sobre “Tutorial Allegro 5 #8 – Primitivas Gráficas

  1. Caique Fortunato

    Como eu faço para deixar a bolinha (do código Animações) e um retângulo, por exemplo, simultaneamente na tela? Eu só consigo fazer o retângulo aparecer uma vez e depois que ele apaga começa a execução da bolinha…

Deixe uma resposta