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 &lt;allegro5/allegro.h&gt;<br />
#include &lt;allegro5/allegro_primitives.h&gt;</p>
<p>#include &lt;stdio.h&gt;<br />
#include &lt;stdbool.h&gt;</p>
<p>bool inicializar();</p>
<p>const int LARGURA_TELA = 640;<br />
const int ALTURA_TELA = 480;</p>
<p>ALLEGRO_DISPLAY *janela = NULL;</p>
<p>int main(void)<br />
{<br />
    if (!inicializar())<br />
    {<br />
        return -1;<br />
    }</p>
<p>    // Linha: x1, y1, x2, y2, cor, espessura<br />
    al_draw_line(20.0, 40.0, 40.0, 60.0, al_map_rgb(255, 0, 0), 1.0);<br />
    al_flip_display();</p>
<p>    al_rest(2.0);</p>
<p>    al_clear_to_color(al_map_rgb(0, 0, 0));<br />
    al_flip_display();</p>
<p>    al_rest(0.5);</p>
<p>    // Triângulo: x1, y1, x2, y2, x3, y3, cor, espessura<br />
    al_draw_triangle(70.0, 30.0, 20.0, 55.0, 110.0, 250.0, al_map_rgb(255, 255, 255), 5.0);<br />
    al_flip_display();</p>
<p>    al_rest(2.0);</p>
<p>    al_clear_to_color(al_map_rgb(0, 0, 0));<br />
    al_flip_display();</p>
<p>    al_rest(0.5);</p>
<p>    // Triângulo preenchido: x1, y1, x2, y2, x3, y3, cor<br />
    al_draw_filled_triangle(40.0, 90.0, 120.0, 246.0, 400.0, 23.0, al_map_rgb(255, 255, 0));<br />
    al_flip_display();</p>
<p>    al_rest(2.0);</p>
<p>    al_clear_to_color(al_map_rgb(0, 0, 0));<br />
    al_flip_display();</p>
<p>    al_rest(0.5);</p>
<p>    // Retângulo: x1, y1, x2, y2, cor, espessura<br />
    al_draw_rectangle(70.0, 30.0, 110.0, 250.0, al_map_rgb(255, 0, 255), 6.0);<br />
    al_flip_display();</p>
<p>    al_rest(2.0);</p>
<p>    al_clear_to_color(al_map_rgb(0, 0, 0));<br />
    al_flip_display();</p>
<p>    al_rest(0.5);</p>
<p>    // Retângulo preenchido: x1, y1, x2, y2, cor<br />
    al_draw_filled_rectangle(88.0, 10.0, 340.0, 77.0, al_map_rgb(0, 255, 255));<br />
    al_flip_display();</p>
<p>    al_rest(2.0);</p>
<p>    al_clear_to_color(al_map_rgb(0, 0, 0));<br />
    al_flip_display();</p>
<p>    al_rest(0.5);</p>
<p>    // Elipse: x1, y1, raio x, raio y, cor, espessura<br />
    al_draw_ellipse(70.0, 90.0, 20.0, 55.0, al_map_rgb(255, 255, 255), 5.0);<br />
    al_flip_display();</p>
<p>    al_rest(2.0);</p>
<p>    al_clear_to_color(al_map_rgb(0, 0, 0));<br />
    al_flip_display();</p>
<p>    al_rest(0.5);</p>
<p>    // Elipse preenchido: x1, y1, raio x, raio y, cor<br />
    al_draw_filled_ellipse(98.0, 145.0, 25.0, 15.0, al_map_rgb(128, 255, 128));<br />
    al_flip_display();</p>
<p>    al_rest(2.0);</p>
<p>    al_clear_to_color(al_map_rgb(0, 0, 0));<br />
    al_flip_display();</p>
<p>    al_rest(0.5);</p>
<p>    // Círculo: x1, y1, raio, cor, espessura<br />
    al_draw_circle(250.0, 300.0, 70.0, al_map_rgb(128, 0, 0), 2.0);<br />
    al_flip_display();</p>
<p>    al_rest(2.0);</p>
<p>    al_clear_to_color(al_map_rgb(0, 0, 0));<br />
    al_flip_display();</p>
<p>    al_rest(0.5);</p>
<p>    // Círculo preenchido: x1, y1, raio, cor<br />
    al_draw_filled_circle(350.0, 50.0, 43.0, al_map_rgb(0, 0, 255));<br />
    al_flip_display();</p>
<p>    al_rest(2.0);</p>
<p>    al_clear_to_color(al_map_rgb(0, 0, 0));<br />
    al_flip_display();</p>
<p>    al_rest(0.5);</p>
<p>    al_destroy_display(janela);</p>
<p>    return 0;<br />
}</p>
<p>bool inicializar()<br />
{<br />
    if (!al_init())<br />
    {<br />
        fprintf(stderr, &quot;Falha ao inicializar a biblioteca Allegro.\n&quot;);<br />
        return false;<br />
    }</p>
<p>    if (!al_init_primitives_addon())<br />
    {<br />
        fprintf(stderr, &quot;Falha ao inicializar add-on de primitivas.\n&quot;);<br />
        return false;<br />
    }</p>
<p>    janela = al_create_display(LARGURA_TELA, ALTURA_TELA);<br />
    if (!janela)<br />
    {<br />
        fprintf(stderr, &quot;Falha ao criar janela.\n&quot;);<br />
        return false;<br />
    }</p>
<p>    al_set_window_title(janela, &quot;Testando allegro_primitives&quot;);</p>
<p>    return true;<br />
}

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! 😀