Temat: Wprowadzenie do OpenGL i GLUT



Podobne dokumenty
Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

Temat: Transformacje 3D

Janusz Ganczarski. OpenGL Pierwszy program

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

GRAFIKA CZASU RZECZYWISTEGO Wstęp do programowania grafiki czasu rzeczywistego.

Zatem standardowe rysowanie prymitywów wygląda następująco:

Programowanie Równoległe wykład, CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej

Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( )

1 Wstęp teoretyczny. Temat: Manipulowanie przestrzenią. Grafika komputerowa 3D. Instrukcja laboratoryjna Układ współrzędnych

Co to jest OpenGL? Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5. OpenGL - Achitektura. OpenGL - zalety. olas@icis.pcz.

Prosty program- cpp. #include <GL/glut.h>

Grafika 3D OpenGL część II

Laboratorium 1. Część I. Podstawy biblioteki graficznej OpenGL.

2 Przygotował: mgr inż. Maciej Lasota

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

Wprowadzenie do klas w C++ oraz biblioteki opengl

Janusz Ganczarski. OpenGL Definiowanie sceny 3D

3 Przygotował: mgr inż. Maciej Lasota

Grafika komputerowa INSTRUKCJA DO LABORATORIUM 2: operacje przestrzenne oraz obsługa klawiatury i myszki

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Zaawansowany kurs języka Python

Rysowanie punktów na powierzchni graficznej

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty.

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

Przekształcenia geometryczne. Dorota Smorawa

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

Wizualizacja 3D. dr inż. Marcin Gabryel

Elementarne obiekty geometryczne, bufory. Dorota Smorawa

Wykład 12. Wprowadzenie do malarstwa, str. 1 OpenGL Open Graphics Library. OpenGL składa się z

8 Przygotował: mgr inż. Maciej Lasota

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D

Wizualne systemy programowania. Wykład 11 Grafika. dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD

Wykład 12. Wprowadzenie do malarstwa, str. 1 OpenGL Open Graphics Library. OpenGL składa się z

Część 4 życie programu

OPENGL PRZEKSZTAŁCENIA GEOMETRYCZNE

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Grafika Komputerowa, Informatyka, I Rok

Grafika komputerowa Wstęp do OpenGL

Bartosz Bazyluk Wprowadzenie Organizacja i tematyka zajęć, warunki zaliczenia.

1 Podstawy c++ w pigułce.

Programowanie, część III

1. Prymitywy graficzne

glwindowpos2d void DrawString (GLint x, GLint y, char *string) { glwindowpos2i (x,y); int len = strlen (string); for (int i = 0; i < len; i++)

Rzutowanie DOROTA SMORAWA

Laboratorium grafiki komputerowej i animacji. Ćwiczenie V - Biblioteka OpenGL - oświetlenie sceny

2 Przygotował: mgr inż. Maciej Lasota

Podstawy Processingu. Diana Domańska. Uniwersytet Śląski

Informatyka I : Tworzenie projektu

Gry Komputerowe Laboratorium 1. Zajęcia organizacyjne Animacja z uwzględnieniem czasu. mgr inż. Michał Chwesiuk 1/22. Szczecin,

Wprowadzenie do QT OpenGL

I - Microsoft Visual Studio C++

Szybkie tworzenie grafiki w GcIde

Bartosz Bazyluk Wprowadzenie Organizacja i tematyka zajęć, warunki zaliczenia.

Grafika komputerowa Wstęp do OpenGL

Allegro5 część 1 - Witaj Świecie! Projekt, inicjalizacja, tworzenie okna, czcionki. Autor: Kamil Krzyszczuk - C mons

Specyfikacja OpenGL Podstawy programowania grafiki komputerowej*

Wprowadzenie do biblioteki klas C++

Simba 3D LOGO. Cele zajęć: - Poznanie zasad i sposobów tworzenia procedur z parametrami. - Poznanie zasad wywoływania procedur z parametrami.

Bartosz Bazyluk Wprowadzenie Organizacja i tematyka zajęć, warunki zaliczenia.

Praktyka programowania projekt

Wstęp do Programowania, laboratorium 02

Grafika komputerowa i wizualizacja

Programowanie obiektowe

Ćwiczenie 4 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Programowanie Równoległe Wykład, CUDA praktycznie 1. Maciej Matyka Instytut Fizyki Teoretycznej

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

Grafika trójwymiarowa

LABORATORIUM 7 Cel: 1_1

Microsoft Visual C++

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

1 Podstawy c++ w pigułce.

Architektura interfejsu użytkownika

OpenGL Zaawansowana grafika komputerowa

1 Temat: Vertex Shader

Obsługa grafiki w Delphi, rysowanie na płótnie, obsługa myszki, zapisywanie obrazków do plików, bitmapy pozaekranowe.

1 Wstęp teoretyczny. Temat: Obcinanie odcinków do prostokąta. Grafika komputerowa 2D. Instrukcja laboratoryjna Prostokąt obcinający

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

Podstawowe komendy. Ćwiczenie 1

P R OGRA M OW A N I E KOMPUTERÓW Ćwiczenia laboratoryjne. TEMAT 8: Moduły standardowe

Expo Composer Garncarska Szczecin tel.: info@doittechnology.pl. Dokumentacja użytkownika

Modelowanie komputerowe dynamiki płynów Maciej Matyka Instytut Fizyki Teoretycznej

OpenGL - Open Graphics Library. Programowanie grafiki komputerowej. OpenGL 3.0. OpenGL - Architektura (1)

Ćwiczenie 5 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Ćwiczenia podstawowe, zestaw 5, część 1

1. Wybierz polecenie rysowania linii, np. poprzez kliknięcie ikony W wierszu poleceń pojawi się pytanie o punkt początkowy rysowanej linii:

C Biblioteka G2. C.1 Koncepcja biblioteki G2.

OpenGL. Silicon Graphics (IRIS GL stacje graficzne)

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C

INSTRUKCJA INSTALACJI I URUCHOMIENIA PROGRAMÓW FINKA DOS W SYSTEMACH 64 bit

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Ćwiczenie nr 1 Szkielet aplikacji wykorzystującej bibliotekę OpenGL dla środowiska Windows z wykorzystaniem Visual C++

Menu Plik w Edytorze symboli i Edytorze widoku aparatów

Język ludzki kod maszynowy

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

TWORZENIE SZEŚCIANU. Sześcian to trójwymiarowa bryła, w której każdy z sześciu boków jest kwadratem. Sześcian

GerbView. 17 grudnia 2016

Transkrypt:

Instrukcja laboratoryjna 8 Grafika komputerowa 3D Temat: Wprowadzenie do OpenGL i GLUT Przygotował: dr inż. Grzegorz Łukawski, mgr inż. Maciej Lasota, mgr inż. Tomasz Michno 1 Wstęp teoretyczny OpenGL (Open Graphics Library, http://www.opengl.org/) jest specyfikacją API służącą do generowania grafiki 3D, używaną obecnie w wielu aplikacjach, m. in. takich jak: aplikacje CAD, gry, programy do modelowania 3D i tworzenia efektów w filmach. OpenGL działa w architekturze klient-serwer, dzięki czemu implementacja (zależna od sprzętu) jest oddzielona od samej aplikacji korzystającej z API. Implementację specyfikacji zazwyczaj dostarczają producenci kart graficznych razem ze sterownikami (istnieje też zupełnie niezależna implementacja Mesa3D). Obecnie OpenGL rozwijane jest wspólnie przez większość firm związanych z produkcją kart graficznych i grafiką w ramach Khronos Group (od lipca 2006, wcześniej w ramach zrzeszenia ARB). W skład grupy wchodzą m. in. nvidia, AMD/ATI, Intel, SGI, Google. Swój początek OpenGL miało w formie biblioteki IRIS GL stworzonej przez firmę Silicon Graphics na potrzeby stacji roboczych IRIS. OpenGL jest rezultatem prac firmy nad poprawą przenaszalności IRIS GL. W lipcu 1992 powstał pierwsza wersja OpenGL 1.0. Obecnie biblioteka ta jest w pełni otwarta i dostępna dla wielu platform systemowych. Umożliwia rysowanie punktów, odcinków i wielokątów w trzech wymiarach, ponadto obsługuje oświetlenie, cieniowanie, mapowanie tekstur, animacje oraz dodatkowe efekty specjalne. OpenGL nie zawiera żadnych funkcji przeznaczonych do zarządzania oknami, interakcją z użytkownikiem czy operacji wejścia/wyjścia, dlatego należy je zaimplementować własnoręcznie lub skorzystać z gotowych bibliotek pomocniczych. GLUT (OpenGL Utility Toolkit) jest właśnie jedną z takich bibliotek. Udostępniany jest na większość systemów operacyjnych, pozwalając na napisanie jednego, uniwersalnego kodu aplikacji. Cecha ta przyczyniła się do bardzo dużej popularności GLUT'a. Biblioteka została napisana przez Marka J. Kilgarda w celu zwiększenia przenaszalności kodu oraz ułatwienia nauki OpenGL'a. Ponieważ GLUT nie został udostępniony na wolnej licencji (Kilgard nadal posiada prawa autorskie) powstało kilka projektów alternatywnych implementacji GLUT'a. Najważniejszym jest freeglut (http://freeglut.sourceforge.net/), który jest w pełni kompatybilny z oryginalną biblioteką GLUT. 1/8

1.1 Instalacja OpenGL + GLUT 1.1.1 System Windows W celu zainstalowanie bibliotek OpenGL oraz GLUT w systemie operacyjnym Windows, należy skopiować odpowiednie pliki nagłówkowe oraz pliki bibliotek (*.lib,*.a,*.dll) do odpowiednich katalogów. Poniżej została przedstawiona tabelka prezentująca nazwy plików, które należy skopiować oraz ich docelowe lokalizacje. Pliki gl.h glu.h glut.h opengl32.lib (*.a) glu32.lib (*.a) glut32.lib (*.a) opengl32.dll glu32.dll glut32.dll Lokalizacja \katalog kompilatora\include\gl \katalog kompilatora\lib \katalog systemowy\system32\ W celu kompilacji kodu źródłowego należy dodać następujące parametry (do sekcji Linker Settings->Other Linker Options): -lopengl32 -lglu32 -glut32 1.1.2 System Linux W systemie Linux najlepiej jest zainstalować bibliotekę freeglut oraz sterowniki do karty graficznej obsługujące 3D (np. udostępniane przez producenta lub społecznościowe). W celu kompilacji najlepiej jest dodać następujące parametry (do sekcji Linker Settings->Other Linker Options): -lglut -lgl -lglu -lx11 -lxmu -lxi -lm 1.2 Konwencja nazw funkcji i typy danych Wszystkie nazwy funkcji wykorzystywane w bibliotekach OpenGL i GLUT posiadają przedrostki pozwalające na identyfikację, z której biblioteki pochodzą: gl dla OpenGL glut dla GLUT 2/8

Przykładowo: glcolor3f(... ) biblioteka OpenGL rdzeń nazwy liczba argumentów typ argumentów Dodatkowa litera v po typie argumentu informuje, że funkcja przyjmuje tablicę argumentów, np.: glvertex4fv(glfloat arg[4]); Biblioteka OpenGL, w celu pełnej przenośności kodu między różnymi platformami wprowadza swoje własne typy danych, np.: Typ Odpowiednik w OpenGL Skrót w funkcji int GLint i float GLfloat f double GLdouble d byte (char) GLbyte b short GLshort s 1.3 Szkielet programu #include <stdlib.h> #include <GL/glut.h> // dodanie biblioteki GLUT void wyswietlaj() // Tu umieszczamy kod, który zostanie // narysowany w obszarze widzenia void rozmiar(int w, int h) // Tu umieszczamy kod odpowiedzialny // za ustawienie rzutowania oraz okna widoku int main(int argc,char *argv[]) // Tu umieszczamy kod odpowiedzialny zainicjowanie // biblioteki GLUT oraz przygotowanie okna do rysowania 3/8

1.4 Najważniejsze funkcje biblioteki GLUT Nazwa funkcji glutinit glutinitdisplaymode glutinitwindowsize glutpositionwindow glutcreatewindow glutdisplayfunc glutreshapefunc glutkeyboardfunc glutmainloop glutswapbuffers glutfullscreen Opis Funkcja inicjuje bibliotekę GLUT Funkcja inicjuje tryb wyświetlania zazwyczaj przyjmuje dwa parametry GLUT_DOUBLE oraz GLUT_RGB Funkcja inicjuje rozmiar nowo tworzonego okna Funkcja określa położenia okna na ekranie monitora Funkcja tworzy nowe okno, jako parametr przyjmuje nazwę dla okna Funkcja służy do podpięcia (rejestracji) funkcji rysujące, funkcja rysująca wywoływania jest za pomocą wywołania zwrotnego (ang. callback) z okna głównego Funkcja służy do podpięcia (rejestracji) funkcji odpowiedzialnej za zmianę obszaru rysowani oraz rzutowania. Podpięta funkcja wywoływania jest za pomocą Funkcja służy do podpięcia (rejestracji) funkcji odpowiedzialnej za obsługę klawiatury. Funkcja uruchamia pętle główną biblioteki GLUT, pelta ta czeka na wystąpienie odpowiedniego wyjątku. Funkcja wykorzystywana w przypadku ustawienia podwójnego bufora GLUT_DOUBLE, służy do przełączania bufora Funkcja ustawia tryb pełnoekranowy dla okna 1.5 Podstawy rysowania Rysowanie w aplikacjach korzystających z GLUT'a odbywa się zawsze w oddzielnej funkcji typu void, nieprzyjmującej parametrów. Podczas konfigurowania GLUT'a należy poinformować go, która z funkcji będzie służyła do wyświetlania (o tym w następnym podrozdziale). Standardowy proces wyświetlania obrazu składa się z następujących kroków: ustawienie koloru, jakim będzie wypełniany ekran przy czyszczeniu (R, G, B, alfa), np. kolor czarny: glclearcolor(0.0, 0.0, 0.0, 1.0); wyczyszczenie buforów 4/8

na początek wystarczy wyczyścić jedynie bufor kolorów: glclear(gl_color_buffer_bit); narysowanie obiektu/obiektów np. narysowanie kwadratu polega na podaniu czterech wierzchołków (glvertex2f(x, y)) i wybraniu typu obiektu jako GL_QUADS. Więcej informacji na ten temat zostanie podanych w dalszych instrukcjach. glcolor3f(1.0, 0.0, 0.0); // ustawienie koloru na czerwony glbegin(gl_quads); glvertex2f(270, 190); glvertex2f(370, 190); glvertex2f(370, 290); glvertex2f(270, 290); glend(); W powyższym przykładzie prostokąt jest rysowany z pominięciem współrzędnej z. Dla rysowania obrazu w pełni trójwymiarowego należy użyć glvertex3f(x, y, z). Trójkąt można narysować za pomocą GL_TRIANGLES: glbegin(gl_triangles); glvertex2f(270, 190); glvertex2f(370, 190); glvertex2f(370, 290); glend(); wyświetlenie obrazu powyższe instrukcje oczekują w kolejce do wykonania, należy poinformować OpenGL, że skończyliśmy rysować i obraz można wyświetlić na ekran. Za wykonanie tej operacji odpowiedzialna jest funkcja glflush(). W przypadku, gdy korzystamy z podwójnego buforowania (które jest zalecane), należy użyć funkcji glutswapbuffers(), która podmieni bufory i wyświetli obraz na ekranie. Biblioteka GLUT oprócz tworzenia okien i obsługi I/O posiada również funkcje 5/8

wyświetlające na ekranie najczęściej używane bryły geometryczne stworzone z trójkątów (wystarczy je wywołać w części odpowiedzialnej za rysowanie obiektów, wszystkie figury są rysowane w środku ekranu): Funkcja void glutsolidsphere(radius, slices, stacks) Opis Rysuje wypełnioną sferę: radius GLdouble promień sfery slices - GLint liczba południków stacks GLint liczba równoleżników void glutwiresphere(radius, slices, stacks) void glutsolidcube(size) void glutwirecube(size) void glutsolidcone(radius, height, slices, stacks) void glutwirecone(radius, height, slices, stacks) void glutsolidtorus(inradius, outradius, nsides, rings) void glutwiretorus(inradius, outradius, nsides, rings) void glutsolidteapot(size) void glutwireteapot(size) Rysuje sferę w postaci druciaka Rysuje wypełniony sześcian: size GLdouble - rozmiar Rysuje sześcian w postaci druciaka Rysuje wypełniony stożek: radius GLdouble promień height GLdouble wysokość slices - GLint liczba południków stacks GLint liczba równoleżników Rysuje stożek w postaci druciaka Rysuje wypełniony torus (oponka, pączek z dziurą w środku): inradius GLdouble wewnętrzny promień outradius GLdouble zewnętrzny promień nsides, rings GLint pełnią podobną rolę, co slices i stack w stożku i sferze Torus w postaci druciaka Rysuje wypełniony czajnik/imbryk (teapot): size GLdouble - rozmiar Rysuje imbryk w postaci druciaka Podstawy rysowania zostaną dokładniej omówione w następnych instrukcjach. 6/8

1.6 Obsługa klawiatury Klawiatura obsługiwana jest podobnie jak rysowanie w programie powinna zostać zadeklarowana funkcja o odpowiednich parametrach. Przy konfigurowaniu biblioteki GLUT należy ustalić, która funkcja będzie służyła do obsługi klawiszy. Przykład (naciśnięcie klawisz ESC lub q będzie skutkowało wyjściem z programu): void klawiatura(unsigned char key, int x, int y) switch (key) case 27 : case 'q': exit(0); break; W przypadku, gdyby zaistniała potrzeba odmalowania ekranu po wciśnięciu klawisza, można użyć funkcji glutpostredisplay(). 1.7 Przykładowy program #include <stdlib.h> #include <GL/glut.h> // funkcja wyświetlająca obraz void display() glclear(gl_color_buffer_bit); glcolor3f(1.0, 0.0, 0.0); glbegin(gl_quads); glvertex2f(270, 190); glvertex2f(370, 190); glvertex2f(370, 290); glvertex2f(270, 290); glend(); glutswapbuffers(); // funkcja wywoływana podczas zmiany rozmiaru okna, // funkcje w niej zawarte będą omówione w dalszych instrukcjach 7/8

void reshape(int w, int h) glviewport(0, 0, (GLsizei) w, (GLsizei) h); glmatrixmode(gl_projection); glloadidentity(); gluortho2d(0.0, (GLdouble) w, 0.0, (GLdouble) h); glmatrixmode(gl_modelview); glloadidentity(); // funkcja obsługi klawiatury void klawiatura(unsigned char key, int x, int y) switch (key) case 27 : case 'q': exit(0); break; int main(int argc, char *argv[]) glutinit(&argc, argv); glutinitdisplaymode(glut_double GLUT_RGB); // ustawienie podwójnego buforowania i kolorów RGB glutinitwindowsize(640, 480); // rozmiar okna glutcreatewindow(argv[0]); glutdisplayfunc(display); // ustawienie funkcji odpowiedzialnej za rysowanie glutreshapefunc(reshape); // ustawienie funkcji wywoływanej przy zmianie rozmiaru okna glutkeyboardfunc(klawiatura); // ustawienie funkcji obsługi klawiatury glutmainloop(); // wejście do głównej pętli programu return 0; 2 Zadania 1. Zmodyfikuj przykładowy program tak, aby wyświetlał zieloną literę F. 2. Napisz program, który będzie wyświetlał podane w instrukcji bryły dostarczane przez bibliotekę GLUT (teapot itp.). Ustawienie, która z figur ma zostać wyświetlona powinno odbywać się za pomocą dowolnie wybranych klawiszy. 8/8