Grafika Komputerowa 2D
Transkrypt
Grafika Komputerowa 2D
Laboratorium nr 1 Instrukcja laboratoryjna 1 1) 1/3 Grafika Komputerowa 2D Temat: Wprowadzenia do biblioteki graficznej Allegro Przygotował: dr inż. Grzegorz Łukawski, mgr inż. Maciej Lasota Wprowadzenie do biblioteki graficznej Allegro Allegro http://alleg.sourceforge.net/ jest darmową biblioteką rozpowszechnianą na zasadach licencji Gift-Ware z pełnym darmowym kodem źródłowym. Biblioteka ta została napisana w całości w języku C (z dodatkowymi wstawkami Asemblera) w 1996 roku przez Shawn Hargreaves i wykorzystywana jest głównie do tworzenia animacji oraz gier. Biblioteka Allegro jest w pełni przenośna, wspiera większość obecnie dostępnych platform systemowych DOS/Windows/UNIX/Linux/MacOS/QNX/BeOS. Allegro posiada szereg funkcji służących do obsługi grafiki, dźwięku, urządzeń peryferyjnych, czasu. Zapewnia stało i zmiennoprzecinkowe operacje matematyczne, funkcje 2D/3D operacje na plikach oraz funkcje tworzenia GUI. Istnieje dodatkowa biblioteka AllegroGL implementująca OpenGL do wykorzystania z biblioteką Allegro. 1.1) Organizacja ekranu X (0,0) Obszar widoczny Y Obszar niewidoczny (wirtualny), w pamięci karty graficznej W trybie graficznym biblioteki Allegro programista ma możliwość kontroli pojedynczych pikseli ekranu (tzw. Bitmap’y). Niezależnie od wybranego trybu, współrzędne pikseli wskazywane są za pomocą współrzędnych X (w poziomie) i Y (w pionie). Początek układu współrzędnego znajduje się w lewym górnym rogu. Laboratorium nr 1 1.2) 2/3 Inicjalizacja biblioteki oraz wybór trybu graficznego W celu inicjalizacji biblioteki Allegro, na początku programu wywołujemy funkcję: allegro_init(); Tryb graficzny inicjujemy za pomocą funkcji: set_gfx_mode(int driver, int w, int h, int v_w, int v_h); Pierwszy parametr określa sposób inicjowania trybu graficznego, kolejne dwa parametry określają wysokość oraz szerokość obszaru widocznego na ekranie monitora. Ostatnie dwa parametry określają minimalne rozmiary obszaru wirtualnego w pamięci karty graficznej standardowo ustawiamy na 0. Driver GFX_AUTODETECT biblioteka Allegro sama wykrywa i ustawia tryb graficzny, GFX_AUTODETECT_FULLSCREEN tryb pełnoekranowy, GFX_AUTODETECT_WINDOWED tryb okienkowy, GFX_SAFE tryb bezpieczny, GFX_TEXT tryb tekstowy (80 x 25). W Szerokość obszaru widocznego H Wysokość obszaru widocznego V_W Minimalna szerokość obszaru wirtualnego V_H Minimalna wysokość obszaru wirtualnego Przed zakończeniem programu należy zakończyć zainicjalizowaną bibliotekę Allegro, poprzez wywołanie funkcji: allegro_exit(); Przykład 1: int main() { allegro_init(); if (set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) != 0) { allegro_message("Problem z ustawieniem trybu graficznego\n"); } // kod programu allegro_exit(); return 0; } END_OF_MAIN(); Laboratorium nr 1 1.3) 3/3 Organizacja obszaru widocznego Obszar widoczny w bibliotece Allegro opisywany jest za pomocą struktury BITMAP. Dwie najważniejsze składowe tej struktury to ‘w’ maksymalna szerokość (X) oraz ‘h’ maksymalna wysokość (Y). Wywołanie funkcji set_gfx_mode() tworzy automatycznie w pamięci karty graficznej obszar wirtualny oraz obszar widoczny, w zależności od parametrów jak zostały podane podczas wywołania funkcji. Automatycznie tworzona jest też zmienna ‘screen’ będąca wskaźnikiem na strukturę BITMAP. 1.4) Najważniejsze funkcje rysujące Nazwa funkcji putpixel getpixel makecol clear_bitmap circle circlefill rect rectfill triangle floodfill line Parametry Opis Funkcja ustawia piksel o void putpixel(BITMAP *bmp, int x, int y, int color) danym kolorze we wskazanym punkcie bitmapy Funkcja pobiera kolor int getpixel(BITMAP *bmp, int x, int y; wskazanego piksela bitmapy Funkcja ustawia i zwraca int makecol(int r, int g, int b) kolor, podany w postaci RGB (0 -255) Funkcja czyści obszar void clear_bitmap(BITMAP *bitmap) widoczny i ustawia kolor obszaru RGB(0,0,0) Funkcja rysująca okrąg we void circle(BITMAP *bmp, int x, int y, int radius, int wskazanym punkcie, color) promieniu i kolorze void circlefill(BITMAP *bmp, int x, int y, int radius, Funkcja rysująca wypełniony int color) okrąg Funkcja rysująca prostokąt o void rect(BITMAP *bmp, int x1, int y1, int x2, int y2, lewym górnym rogu w punkcie int color) (x1,y1) i prawym dolnym rogu (x2,y2) void rectfill(BITMAP *bmp, int x1, int y1, int x2, int Funkcja rysująca wypełniony y2, int color) prostokąt Funkcja rysująca trójkąt void triangle(BITMAP *bmp, int x1, y1, x2, y2, x3, między trzema podanymi y3, int color) punktami Funkcja wypełniająca zamknięty obszar danym void floodfill(BITMAP *bmp, int x, int y, int color) kolorem, wewnątrz którego znajduje się punkt (x,y) Funkcja rysująca linię miedzy void line(BITMAP *bmp, int x1, int y1, int x2, int y2, dwoma podanymi punktami, o int color) danym kolorze