OpenGL
Transkrypt
OpenGL
Grafika komputerowa OpenGL Szkielet programu Biblioteka GLUT (1) ● ● ● OpenGL jest uniwersalnym i przenośnym API służącym do rysowania grafiki 2D i 3D. W związku z tym w jej ramach nie umieszczono procedur służących do interakcji z systemem operacyjnym, w tym: otwierania okien, obsługi klawiatury i myszy. GLUT (OpenGL Utility Toolkit) jest API zapewniającym interfejs do tworzenia prostych, interaktywnych aplikacji 2D i 3D za pomocą OpenGL. Biblioteka GLUT (2) ● ● ● Biblioteka GLUT zapewnia, między innymi, możliwość tworzenia wielu okien, w których można rysować za pomocą OpenGL, obsługę urządzeń wejściowych, w tym klawiatury i myszy za pomocą procedur callback. Biblioteka GLUT nie jest oficjalną częścią standardu OpenGL, ale została zaimplementowana w wielu środowiskach. Programy napisane za jej pomocą kompilują się praktycznie wszędzie. Szkielet programu (1) ● ● ● Szkielet programu zostanie wykonany w Visual Studio .NET 2003. Do pracy wykorzystamy bibliotekę GLUT, którą można sciągnąć korzystając z linka na mojej stronie (plik glut-3.7.6-bin.zip). Bibliotekę, tą można zainstalować w systemie tak, aby była dostępna dla wszystkich projektów. Sposób takiej instalacji został opisany w pliku tekstowym załączonym do pliku glut-3.7.6bin.zip. Szkielet programu (2) ● ● ● Poniżej opisany zostanie sposób przygotowania projektu w VS .NET, który nie wymaga ingerencji w zainstalowane już oprogramowanie. Pliki biblioteki będą zatem dostępne jedynie dla tego projektu. Gotowy projekt można ściągnąć z mojej strony (plik szkielet.zip). Szkielet programu (3) ● ● ● ● Uruchom Visual Studio i z menu File wybierz opcję New/Project. W okienku dialogowym (lewa strona) wybierz Visual C++ Projects, a po prawej stronie "Win32 Console Project". Z dołu okienka dialogowego wybierz katalog i nazwę projektu. Zatwierdź wybór przyciskiem OK. Wybierz opcję "Application Settings" i zaznacz "Empty Project". Zatwierdź opcję przyciskiem "Finish". Szkielet programu (4) ● ● ● ● W okienku "Solution explorer" naciśnij prawy klawisz na "source files" i wybierz Add/Add new item... Wybierz "C++ file", wpisz nazwę pliku np.: main_file. Zatwierdź za pomocą przycisku "Open". Z menu "Project" wybierz opcję "Properties". Wybierz "linker/command line" i do okienka po prawej stronie wpisz następujące biblioteki: opengl32.lib glu32.lib glaux.lib glut32.lib Szkielet programu (5) ● Jako tresć pliku main_file.cpp wpisz następujący kod: #include #include #include #include #include <windows.h> //Wymagane dla implementacji OpenGL w Visual Studio. "gl\gl.h" "gl\glu.h" "gl\glaux.h" "gl\glut.h" void displayFrame(void) { } int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(450,450); glutInitWindowPosition(0,0); glutCreateWindow("Program OpenGL"); glutDisplayFunc(displayFrame); //Tu umieszczamy kod inicjujący pracę w OpenGL glutMainLoop(); return 0; } Szkielet programu (6) ● ● ● W katalogu z projektem utwórz podkatalog „gl” i wgraj do niego plik "glut.h" z pliku glut-3.7.6bin.zip Pozostałe pliki z archiwum wgraj do katalogu z projektem. Sprobuj skompilować i uruchomić projekt. Powinieneś otrzymać dwa okna: – Okno z czarnym tłem – konsolę – Okno o nazwie "Program OpenGL", którego zawartość nie jest rysowana. Szkielet programu (7) ● ● Gotowy szkielet programu można również ściągnąć z mojej strony (plik szkielet.zip). Kolejne slajdy objaśniają działanie poszczególnych procedur biblioteki GLUT, które zostały wykorzystane w szkielecie programu. Procedura glutInit ● Inicjuje do pracy bibliotekę GLUT. ● Składnia: void glutInit(int *argcp, char **argv); ● ● ● Jako parametry powinno się przekazywać argc i argv z procedury main. Parametry te są modyfikowane poprzez usunięcie wszystkich opcji rozumianych przez bibliotekę GLUT. Opcje te są wykorzystywane do parametryzacji pracy biblioteki. Procedura glutInitDisplayMode ● ● ● Ustawia początkowy tryb wyświetlania Składnia: void glutInitDisplayMode(unsigned int mode); Parametr mode jest mapą bitową w której opcje ustawia się jako superpozycję (sumę bitową) pewnych stałych, np: – GLUT_DOUBLE – podwójne buforowanie – GLUT_RGB – wyświetlanie kolorów bez palety – GLUT_DEPTH – ukrywanie niewidocznych powierzchni za pomocą Z-Bufora Procedura glutInitWindowSize ● ● Ustala wymiary okna w pikselach, które powinno zostać utworzone za pomocą glutCreateWindow (patrz dalej). Składnia: void glutInitWindowSize(int width, int height); Procedura glutInitWindowPosition ● ● Ustala położenie okna (w pikselach), które zostanie utworzone za pomocą glutCreateWindow (patrz dalej). Składnia void glutInitWindowPosition(int x, int y); Procedura glutCreateWindow ● ● ● Tworzy okno o zadanym tytule oraz położeniu i wymiarach zadanych za pomocą procedur glutInitWindowSize i glutInitWindowPosition. Składnia: int glutCreateWindow(char *name); Okno jest faktycznie pokazywane dopiero w momencie wykonania glutMainLoop (patrz dalej). Procedura glutDisplayFunc ● ● ● Ustala adres procedury callback wywoływanej w sytuacji, gdy konieczne jest odświeżenie zawartości okna. Składnia: void glutDisplayFunc(void (*func)(void)); Procedura callback może mieć dowolną nazwę, ale nie może przyjmować żadnych parametrów, ani zwracać żadnych wartości (w końcu to procedura ;)) Procedura glutMainLoop ● ● ● ● Reprezentuje główną pętlę programu. W momencie zajścia różnych zdarzeń wywołuje odpowiednie procedury callback. Zakończenie tej procedury powinno kończyć program. Procedura zostanie zakończona jedynie w odpowiedzi na odpowiednie zdarzenie.