Janusz Ganczarski. OpenGL Pierwszy program



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

Janusz Ganczarski. OpenGL Definiowanie sceny 3D

Rzutowanie DOROTA SMORAWA

Materiały. Dorota Smorawa

3 Przygotował: mgr inż. Maciej Lasota

Przekształcenia geometryczne. Dorota Smorawa

Mieszanie kolorów. Dorota Smorawa

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

Światła i rodzaje świateł. Dorota Smorawa

Temat: Wprowadzenie do OpenGL i GLUT

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

Elementarne obiekty geometryczne, bufory. Dorota Smorawa

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

Rysowanie punktów na powierzchni graficznej

Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( )

Temat: Transformacje 3D

GRAFIKA KOMPUTEROWA 8: Konwersja i mieszanie kolorów

PRZEWODNIK PO PRZEDMIOCIE

Szybkie tworzenie grafiki w GcIde

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

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

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

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

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

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

Wizualizacja 3D. dr inż. Marcin Gabryel

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

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

OPENGL PRZEKSZTAŁCENIA GEOMETRYCZNE

Grafika 3D OpenGL część II

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

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

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Zaawansowany kurs języka Python

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

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

6 Przygotował: mgr inż. Maciej Lasota

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

Wprowadzenie do klas w C++ oraz biblioteki opengl

C Biblioteka G2. C.1 Koncepcja biblioteki G2.

Podstawy Informatyki Wykład V

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

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

Symulacja samochodu z kamerą stereowizyjną. Krzysztof Sykuła 15 czerwca 2007

Programowanie, część III

OpenGL oświetlenie. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

Widżety KIWIPortal. tworzenie umieszczanie na stronach internetowych opcje zaawansowane. Autor: Damian Rebuś Data: Wersja: 1.

I. Spis treści I. Spis treści... 2 II. Kreator szablonów Tworzenie szablonu Menu... 4 a. Opis ikon Dodanie nowego elementu...

Część 4 życie programu

Tekstury. Dorota Smorawa

ANALIZA I INDEKSOWANIE MULTIMEDIÓW (AIM)

Grafika trójwymiarowa

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

5 Przygotował: mgr inż. Maciej Lasota

Laboratorium 5: Tablice. Wyszukiwanie binarne

TEMAT : KLASY DZIEDZICZENIE

Kurs WWW. Paweł Rajba.

Wstęp Podstawy Pierwszy program Definiowanie sceny 3D Przekształcenia geometryczne... 47

Programowanie Proceduralne

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Obcinanie grafiki do prostokąta

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Światło. W OpenGL można rozróżnić 3 rodzaje światła

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Ćwiczenie 6 Animacja trójwymiarowa

Plan wykładu. Akcelerator 3D Potok graficzny

Technologie Informacyjne Mechatronika 2012/2013 Turtle

Grafika komputerowa Wstęp do OpenGL

Systemy multimedialne 2015

I - Microsoft Visual Studio C++

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Specyfikacja OpenGL Podstawy programowania grafiki komputerowej*

OpenGL Światło (cieniowanie)

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Visual Studio instalacja

8 Przygotował: mgr inż. Maciej Lasota

Grafika komputerowa Wstęp do OpenGL

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Ćwiczenie 2 Warstwy i kształty podstawowe

Ćwiczenie 1 Automatyczna animacja ruchu

Scenariusz lekcji opartej na programie Program nauczania informatyki w gimnazjum DKW /99

Programowanie obiektowe

4. Rysowanie krzywych

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

Oświetlenie w OpenGL. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 8. Światło otaczajace. Światło rozproszone.

Grafika i komunikacja człowiek komputer Laboratorium. Część 2: Graphics

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Grafika Komputerowa Wykład 6. Teksturowanie. mgr inż. Michał Chwesiuk 1/23

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Programowanie OpenGL

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Struktury czyli rekordy w C/C++

Instrukcja do ćwiczeń

Efekt lustra 3D w OpenGL z wykorzystaniem bufora szablonowego (stencil buffer)

Programowanie w języku C++

TECHNIKI MULTIMEDIALNE LABORATORIUM GIMP: Projektowanie tła

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Jarosław Kuchta Podstawy Programowania Obiektowego. Podstawy grafiki obiektowej

Transkrypt:

Janusz Ganczarski OpenGL Pierwszy program

Spis treści Spis treści..................................... 1 1. Pierwszy program.............................. 1 1.1. Rysowanie sceny 3D........................... 1 1.1.1. Kolor tła............................. 1 1.1.2. Czyszczenie bufora koloru................... 1 1.1.3. Kolor obiektu.......................... 1 1.1.4. Definiowanie obiektu...................... 2 1.1.5. Wykonanie poleceń OpenGL i zamiana buforów koloru... 3 1.2. Tworzenie okna renderingu....................... 3 1.3. Obsługa menu podręcznego....................... 4 1.4. Plik kwadrat1.cpp............................ 4 Literatura..................................... 7

1. Pierwszy program Pierwszy program korzystający z biblioteki OpenGL jest oczywiście bardzo prosty. Wyświetlimy w oknie o rozmiarach 400 400 pikseli kwadrat o bokach jednostkowych. Program składa się z trzech zasadniczych elementów. Pierwszy to funkcja rysująca scenę 3D, drugim jest inicjacja okna renderingu a trzecim obsługa menu podręcznego. 1.1. Rysowanie sceny 3D Rysowanie, czy też jak przyjęło się to nazywać, renderowanie sceny 3D, składa się z kilku kroków. Z uwagi na prostotę programu etapy występujące w pierwszym programie nie przedstawiają kompletnego schematu tworzenia sceny 3D. 1.1.1. Kolor tła Pierwszym etapem tworzenia sceny 3D, który realizuje funkcja Display, jest określenie koloru tła, czyli wartości jakimi zostanie wypełniony bufor koloru. Realizuje to funkcja: void glclearcolor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) której parametry red, green, blue określają wartości składowych koloru, a parametr alpha wartość składowej kanału alfa (stopień przezroczystości piksela). Wartości wszystkich parametrów funkcji glclearcolor powinny zawierać się w przedziale [0, 1]. Parametry przekraczające powyższy zakres zostaną odpowiednio przycięte: mniejsze od 0 przyjmą wartość 0, większe od 1 wartość 1. Domyślne podczas czyszczenia bufora koloru używa się koloru (0, 0, 0, 0). 1.1.2. Czyszczenie bufora koloru Po określeniu koloru tła przystępujemy do wyczyszczenia tła, czyli wypełnienia zawartości bufora koloru. Wykonuje to funkcja: void glclear (GLbitfield mask) której na razie jedynym parametrem jest stała GL COLOR BUFFER BIT określająca jaki element bufora ramki ma zostać wypełniony. 1.1.3. Kolor obiektu Kolejnym etapem tworzenia naszej sceny 3D jest określenie koloru obiektu. Wykorzystamy do tego celu jedną z funkcji z rodziny glcolor:

1. Pierwszy program 2 void glcolor3f (GLfloat red, GLfloat green, GLfloat blue) której parametry red, green, blue określają wartości składowych koloru. Zakres tych wartości powinny zawierać się w przedziale [0, 1]. Wartości znajdujące się poza tym przedziałem zostaną odpowiednio przycięte. Uważny Czytelnik zapyta zapewne dlaczego dla koloru obiektu nie określamy wartości składowej alfa. Jest to oczywiście możliwe - rodzina funkcji glcolor zawiera także funkcje określające kolor na podstawie czterech składowych. Jeżeli jednak zdecydujemy się na określanie tylko składowych RGB, składowa alfa przyjmuje domyślną wartość 1,0 (całkowita nieprzezroczystość). 1.1.4. Definiowanie obiektu Definiowanie obiektów w OpenGL rozpoczyna wywołanie funkcji: void glbegin (GLenum mode) która określa rodzaj generowanego prymitywu lub prymitywów. W pierwszym programie traktujemy kwadrat jako szczególny przypadek wielokąta, stąd stała GL POLYGON. Kolejne wierzchołki kwadratu określamy przy pomocy funkcji: void glvertex3f (GLfloat x, GLfloat y, GLfloat z) która należy do rodziny obszernej funkcji glvertex. Jeżeli uważnie popatrzymy na współrzędne wierzchołków rysowanego kwadratu, to zauważymy, że zawiera się on w płaszczyźnie o równaniu Z = 0. W takim przypadku do definiowania współrzędnych wierzchołków obiektów można także zastosować funkcję glvertex2, która pozwala określić dwie pierwsze współrzędne wierzchołków, trzeciej nadając wartość 0. Definiowane współrzędnych wierzchołków obiektu obowiązkowo kończy wywołanie funkcji: void glend (void) Specyfikacja biblioteki nie pozwala na uruchamianie wszystkich poleceń OpenGL pomiędzy parą wywołań funkcji glbegin i glend. Co do zasady mogą się tam znaleźć polecenia generujące obiekty sceny. Wywołanie niedozwolonej funkcji powoduje zgłoszenie błędu, ale nie przerywa działania programu.

1. Pierwszy program 3 1.1.5. Wykonanie poleceń OpenGL i zamiana buforów koloru To w jaki sposób biblioteka utworzy scenę 3D, po wywołaniu wszystkich funkcji tworzących jej elementy, zależy oczywiście od konkretnej implementacji. Jednak wywołując funkcję void glflush (void) możemy wymusić wykonanie wszystkich dotychczasowych poleceń. Ma to szczególne znaczenie, gdy dana implementacja stosuje bufory poleceń, a zależy nam na wykonaniu części zadań. Końcowym elementem tworzenia sceny 3D jest zamiana buforów koloru, co w przypadku stosowania biblioteki GLUT realizuje funkcja: void glutswapbuffers (void) 1.2. Tworzenie okna renderingu Okno renderingu tworzone jest funkcji main programu. Inicjalizację bufora ramki wykonuje funkcja: void glutinitdisplaymode (unsigned int mode) W przykładowym programie wartość parametru mode decyduje, że bufor ramki zawiera dwa bufory koloru (stała GLUT DOUBLE), które pracują w trybie RGB (stała GLUT RGB). Rozmiar okna renderingu, w którym będzie rysowana scena 3D określa funkcja: void glutinitwindowsize (int width, int height) której parametry width i height oznaczają odpowiednio szerokość i wysokość obszaru dostępnego do renderingu. Warto zauważyć, że wielkość okna jakie zostanie utworzone po wywołaniu funkcji: int glutcreatewindow (char *name) jest zależna od systemu operacyjnego i jest tak dobrane aby obszar dostępny do renderingu miał wcześniej określone rozmiary. W przykładowym programie obszar renderingu jest stały - zmiana rozmiaru okna (funkcja Reshape) nie modyfikuje jego rozmiarów. Zmiana rozmiaru okna nie powoduje zmiany wielkości ani przemieszczenia rysowanego kwadratu. Ostatnim etapem tworzenia okna renderingu jest dołączenie funkcji generującej scenę 3D (Display) oraz funkcji wywoływanej przy zmianie rozmiarów okna (Reshape). Realizują to funkcje: void glutdisplayfunc (void (*func)(void)) void glutreshapefunc (void (*func)(int width, int height))

1. Pierwszy program 4 1.3. Obsługa menu podręcznego Menu podręczne tworzy funkcja: int glutcreatemenu (void (*func)(int value)) której parametrem jest wskaźnik do funkcji obsługi komunikatów menu (w programie funkcja Menu) a zwracana wartośc to unikatowy numer menu. Dodanie kolejnych pozycji do menu podęcznego umożliwia funkcja: void glutaddmenuentry (char *name, int value) której parametry to nazwa pozycji menu i numer (unikatowy) przekazywany w przypadku wybrania tej pozycji do funkcji obsługującej komunikaty menu. W tym i dalszych programach unikatowość numerów menu zapewnia zastosowanie typu wyliczeniowego. W pierwszym programie menu ma minimalną zawartość - umożliwia jedynie wyjście z programu. Ostatnią operacją przy tworzeniu menu podręcznego jest wywołanie funkcji określającej, który przycisk myszki aktywuje menu: void glutattachmenu (int button) Możliwe są następujące wartości parametru button: GLUT LEFT BUTTON - lewy przycisk myszki, GLUT MIDDLE BUTTON - środkowy przycisk myszki, GLUT RIGHT BUTTON - prawy przycisk myszki. 1.4. Plik kwadrat1.cpp Początkowe okno programu kwadrat1.cpp, którego tekst źródłowy znajduje się poniżej, przedstawia rysunek 1. / ( c ) Janusz Ganczarski ( Power ) h t t p : / /www. j a n u s z g. hg. p l JanuszG@enter. n e t. p l / #include <GL/ glut. h> #include < s t d l i b. h> // f u n k c j a g e n e r u j ą c a s c e n ę 3D void D i s p l a y ( ) // k o l o r t ł a z a w a r t o ś ć b u f o r a k o l o r u g l C l e a r C o l o r ( 1. 0, 1. 0, 1. 0, 1. 0 ) ; // c z y s z c z e n i e b u f o r a k o l o r u g l C l e a r ( GL COLOR BUFFER BIT ) ; // k o l o r k w a d r a t u g l C o l o r 3 f ( 1. 0, 0. 0, 0. 0 ) ; // p o c z ą t e k d e f i n i c j i w i e l o k ą t a g l B e g i n (GL POLYGON) ; // k o l e j n e w i e r z c h o ł k i w i e l o k ą t a g l V e r t e x 3 f ( 0. 0, 0. 0, 0. 0 ) ; g l V e r t e x 3 f ( 0. 0, 1. 0, 0. 0 ) ;

1. Pierwszy program 5 Rysunek 1. Okno początkowe programu Kwadrat 1 g l V e r t e x 3 f ( 1. 0, 1. 0, 0. 0 ) ; g l V e r t e x 3 f ( 1. 0, 0. 0, 0. 0 ) ; // k o n i e c d e f i n i c j i prymitywu glend ( ) ; // s k i e r o w a n i e p o l e c e ń do wykonania g l F l u s h ( ) ; // zamiana b u f o r ó w k o l o r u glutswapbuffers ( ) ; // zmiana w i e l k o ś c i okna void Reshape ( int Width, int Height ) // g e n e r o w a n i e s c e n y 3D D i s p l a y ( ) ; // s t a ł e do o b s ł u g i menu p o d r ę c z n e g o enum EXIT // w y j ś c i e ; // ob sług a menu podręcznego void Menu ( int v a l u e ) switch ( v a l u e ) // w y j ś c i e

1. Pierwszy program 6 case EXIT : e x i t ( 0 ) ; int main ( int argc, char argv [ ] ) // i n i c j a l i z a c j a b i b l i o t e k i GLUT g l u t I n i t (& argc, argv ) ; // i n i c j a l i z a c j a b u f o r a ramki g l u t I n i t D i s p l a y M o d e (GLUT DOUBLE GLUT RGB ) ; // r o z m i a r y g ł ó w n e g o okna programu g l u t I n i t W i n d o w S i z e ( 4 0 0, 4 0 0 ) ; // u t w o r z e n i e g ł ó w n e g o okna programu glutcreatewindow ( Kwadrat 1 ) ; // d o ł ą c z e n i e f u n k c j i g e n e r u j ą c e j s c e n ę 3D glutdisplayfunc ( Display ) ; // d o ł ą c z e n i e f u n k c j i wywoływanej p r z y z m i a n i e r o z m i a r u okna glutreshapefunc ( Reshape ) ; // u t w o r z e n i e menu p o d r ę c z n e g o glutcreatemenu ( Menu ) ; // d o d a d n i e p o z y c j i do menu p o d r ę c z n e g o glutaddmenuentry ( Wyjście,EXIT ) ; // o k r e ś l e n i e p r z y c i s k u m y s z k i o b s ł u g u j ą c e j menu p o d r ę c z n e glutattachmenu (GLUT RIGHT BUTTON ) ; // w p r o w a d z e n i e programu do o b s ł u g i p ę t l i komunikatów glutmainloop ( ) ; return 0 ;

Literatura 7 Literatura [1] Mark Segal, Kurt Akeley: The OpenGL Graphics System. A Specification Version 2.0 [2] Jackie Neider, Tom Davis, Mason Woo: OpenGL Programming Guide The Red Book [3] Richard S. Wright jr, Michael Sweet: OpenGL Księga eksperta, Helion 1999 [4] The official OpenGL web page, http://www.opengl.org [5] Piotr andrzejewski, Jakub Kurzak: Wprowadzenie do OpenGL. Programowanie zastosowań graficznych, Kwantum 2000