27 paź 2012

Lekcja 1.0.5 Allegro5 - prymitywy

                                      Prymitywy                  LINK->Przykłady z kursu.   
 Aby wyświetlać proste linie, trójkąty, prostokąty, okręgi, i inne figury geometryczne, nie potrzebujemy wyświetlać bitmap wystarczą nam figury geometryczne, tak zwane prymitywy. 

 #include <allegro5/allegro_primitives.h> -  plik nagłówkowy.
 al_init_primitives_addon(); - inicjowanie prymitywów.

 al_shutdown_primitives_addon(); - Wyłączenie prymitywów odbywa się automatycznie przy wyjściu z programu, ale możemy to zrobić w każdej chwili podczas jego działania.

Kolory prymitywów możemy określić wcześniej za pomocą (np. ALLEGRO_COLOR kolor = al_map_rgb0,  0255); lub bezpośrednio w funkcji- al_draw_line( 10, 15, 80, 90, al_map_rgba( 0, 0, 255, 128), 4); // tu linia szeroka na 4 piksele, plus dodanie przezroczystości (czwarty parametr). 

....................................................................................................................................... 
 Rysuje prosty odcinek między dwoma punktami.
  al_draw_line( x1, y1, x2, y2, kolor, szerokosc);
 Parametry:
  x1, y1, x2, y2 - początek i koniec linii. (liczby typu float).
  kolor              - kolor linii.
  szerokosc      - szerokość linii. (liczba typu float).
Przykład:
 al_draw_line( 10, 15, 80, 90, al_map_rgba( 0, 255, 0, 128), 4);
....................................................................................................................................
Rysuje trójkąt (linie) pomiędzy trzema punktami.
  al_draw_triangle( x1, y1, x2, y2, x3, y3, kolor, szerokosc);
 Parametry:
  x1, y1, x2, y2, x3, y3 - trzy punkty trójkąta.(liczby typu float).
  kolor                          - kolor linii trójkąta.
  szerokosc                  - szerokość linii. (liczba typu float).
 Przykład:
 al_draw_triangle(100, 15, 150, 25, 125, 80, al_map_rgb(255, 0, 0), 8);
..................................................................................................................................
Rysuje wypełniony trójkąt.
  al_draw_filled_triangle(x1,y1,x2,y2,x3,y3,kolor);
  Parametry:
  x1, y1, x2, y2, x3, y3 - trzy punkty trójkąta.(liczby typu float).
  kolor                          - kolor trójkąta.
Przykład:
al_draw_filled_triangle(190, 15, 250, 76, 175, 80, al_map_rgb(0,0,255));
.................................................................................................................................
Rysuje prostokąt (linie) pomiędzy czterema punktami.
  al_draw_rectangle(x1,y1,x2,y2,kolor,szerokosc);
 Parametry:
  x1, y1, x2, y2 - lewy górny i prawy dolny punkt prostokąta.(liczby typu float).
  kolor              - kolor linii prostokąta .
  szerokosc      - szerokość linii. (liczba typu float).
Przykład:
al_draw_rectangle(250,10,300, 60,al_map_rgba(255,255,0,128),2);
..............................................................................................................................
Rysuje wypełniony prostokąt.
  al_draw_filled_rectangle(x1,y1,x2,y2,kolor);
 Parametry:
  x1, y1, x2, y2 - lewy górny i prawy dolny punkt prostokąta.(liczby typu float).
  kolor              - kolor prostokąta.
 Przykład:
 al_draw_filled_rectangle(280, 20,350, 80,al_map_rgba(0,0,0,100));
..............................................................................................................................
Rysuje zaokrąglony prostokąt (linie) pomiędzy czterema punktami.
  al_draw_rounded_rectangle( x1, y1, x2, y2, rx, ry, kolor, szerokosc);
 Parametry:
  x1, y1, x2, y2 - lewy górny i prawy dolny punkt prostokąta.(liczby typu float).
  kolor              - kolor linii prostokąta .
  rx, ry              - promień łuku.(liczby typu float).
  szerokosc       - szerokość linii. (liczba typu float).
 Przykład:
 al_draw_rounded_rectangle( 50,100,100,150,12,12,al_map_rgb(0,255,255),5);
.........................................................................................................................
Rysuje zaokrąglony wypełniony prostokąt.
  al_draw_filled_rounded_rectangle( x1, y1, x2, y2, rx, ry, kolor);
 Parametry:
  x1, y1, x2, y2 - lewy górny i prawy dolny punkt prostokąta.(liczby typu float).
  kolor              - kolor prostokąta .
  rx, ry              - promień łuku.(liczby typu float).
 Przykład:
 al_draw_filled_rounded_rectangle(110, 90,150,154, 12, 20,al_map_rgb(128,0,255));
.........................................................................................................................
Rysuje okrąg.
  al_draw_circle( cx,  cy,  r, kolor, szerokosc);
  Parametry:
  cx, cy - środek okręgu.(liczby typu float)
  r         - promień okręgu. (liczba typu float).
  kolor  - kolor linii okręgu.
  szerokosc - szerokość linii okręgu. (liczba typu float).
  Przykład:
  al_draw_circle(200,120, 30, al_map_rgb( 0,128, 0), 20);
........................................................................................................................
Rysuje wypełniony okrąg.
  al_draw_filled_circle( cx,  cy,  r, kolor);
  Parametry:
  cx, cy - środek okręgu.(liczby typu float).
  r         - promień okręgu. (liczba typu float).
  kolor  - kolor okręgu.
 Przykład:
  al_draw_filled_circle(250,120, 34, al_map_rgba(200,28, 0,60));
........................................................................................................................
Rysuje elipsę.
 al_draw_ellipse(cx, cy, rx, ry, kolor, szerokosc);
  Parametry:
  cx, cy - środek elipsy.(liczby typu float)
  rx, ry - promienie elipsy. (liczba typu float).
  kolor  - kolor linii elipsy.
  szerokosc - szerokość linii elipsy. (liczba typu float).
  Przykład:
  al_draw_ellipse(320, 120, 20, 50, al_map_rgba( 128,128,0,128), 8);
........................................................................................................................
 Rysuje wypełnioną elipsę. 
 al_draw_filled_ellipse(cx, cy, rx, ry, kolor); 
 Parametry 
 cx, cy - środek elipsy.(liczby typu float) 
 rx, ry - promienie elipsy. (liczba typu float).
 kolor  - kolor elipsy. 
 Przykład: 
 al_draw_filled_ellipse(80, 190, 40, 24, al_map_rgb(0, 128, 255));
........................................................................................................................
To tylko kilka najbardziej przydatnych prymitywów. tu link do pozostałych PRYMITYWY


Przykładowy kod:
#include <allegro5/allegro.h>
#include <allegro5/allegro_primitives.h>
int main()
{
    al_init();
    al_init_primitives_addon();
    al_install_keyboard();
    ALLEGRO_KEYBOARD_STATE klawiatura;
    al_set_new_display_flags(ALLEGRO_WINDOWED);
    ALLEGRO_DISPLAY *okno = al_create_display(400,300);
    al_set_window_title( okno,"Allegro5 - Prymitywy");
    ALLEGRO_EVENT_QUEUE *kolejka = al_create_event_queue(); // event_queue
    al_register_event_source(kolejka, al_get_display_event_source(okno));
    ALLEGRO_EVENT zdarzenie; // event
    while(!al_key_down(&klawiatura, ALLEGRO_KEY_ESCAPE))
    {
        al_get_next_event(kolejka, &zdarzenie);
        if(zdarzenie.type == ALLEGRO_EVENT_DISPLAY_CLOSE) { return 0; }
        al_get_keyboard_state(&klawiatura);
        al_clear_to_color(al_map_rgb(150,150,150)); //tło
        al_draw_line( 10, 15, 80, 90, al_map_rgba( 0, 255, 0, 128), 4);
        al_draw_triangle(100, 15, 150, 25, 125, 80, al_map_rgb(255, 0, 0), 8);
        al_draw_filled_triangle(190, 15, 250, 76, 175, 80, al_map_rgb(0,0,255));
        al_draw_rectangle(250,10,300, 60,al_map_rgba(255,255,0,128),2);
        al_draw_filled_rectangle(280, 20,350, 80,al_map_rgba(0,0,0,100));
        al_draw_rounded_rectangle( 50,100,100,150,12,12,al_map_rgb(0,255,255),5);
        al_draw_filled_rounded_rectangle(110, 90,150,154, 12, 20,al_map_rgb(128,0,255));
        al_draw_circle(200,120, 30, al_map_rgb( 0,128, 0), 20);
        al_draw_filled_circle(250,120, 34, al_map_rgba(200,28, 0,60));
        al_draw_ellipse(320, 120, 20, 50, al_map_rgba( 128,128,0,128), 8);
        al_draw_filled_ellipse(80, 190, 40, 24, al_map_rgb(0, 128, 255));
        al_flip_display();
        al_rest(0.005);//pauza
    }
    al_destroy_display(okno);
    return 0;
}

3 komentarze:

Anonimowy pisze...

Bardzo fajnie opisane.
A Biblioteka jest świetna:)

Anonimowy pisze...

Myślę, że warto tu wspomnieć o funkcji
al_set_target_display oraz al_set_target_bitmap.
Ja na przykład potrzebowałem do utworzenia własnoręcznie bitmap i sprawdziłem sobie w manualu (allegro.cc).

Anonimowy pisze...

Aha i zapomniałem dodać, że tutorial jest dla mnie bardzo czytelny i pomocny :)