Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

Podobne dokumenty
Janusz Ganczarski. OpenGL Pierwszy program

Rzutowanie DOROTA SMORAWA

Mieszanie kolorów. Dorota Smorawa

Materiały. Dorota Smorawa

Janusz Ganczarski. OpenGL Definiowanie sceny 3D

Przekształcenia geometryczne. Dorota Smorawa

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

Elementarne obiekty geometryczne, bufory. Dorota Smorawa

Temat: Wprowadzenie do OpenGL i GLUT

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

3 Przygotował: mgr inż. Maciej Lasota

Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( )

Temat: Transformacje 3D

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

PRZEWODNIK PO PRZEDMIOCIE

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

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

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

Rysowanie punktów na powierzchni graficznej

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

Grafika komputerowa Wstęp do OpenGL

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 6

Tekstury. Dorota Smorawa

Wizualizacja 3D. dr inż. Marcin Gabryel

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

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

Grafika 3D OpenGL część II

Grafika komputerowa Wstęp do OpenGL

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

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

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

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

8 Przygotował: mgr inż. Maciej Lasota

OPENGL PRZEKSZTAŁCENIA GEOMETRYCZNE

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

Wprowadzenie do klas w C++ oraz biblioteki opengl

6 Przygotował: mgr inż. Maciej Lasota

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

Część 4 życie programu

OpenGL - maszyna stanu. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 7. Grupy atrybutów. Zmienne stanu.

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

Allegro5 3/x. Przykład wklejamy go do dev'a zamiast kodu domyślnego dal programu z allegro i kompilujemy.

GRAFIKA KOMPUTEROWA 8: Konwersja i mieszanie kolorów

Programowanie OpenGL

2 Przygotował: mgr inż. Maciej Lasota

PyGame Gra w Ponga. Spis treści

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

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

Grafika trójwymiarowa

Programowanie, część III

Programowanie OpenGL

I - Microsoft Visual Studio C++

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

Obcinanie grafiki do prostokąta

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

C Biblioteka G2. C.1 Koncepcja biblioteki G2.

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

Zaawansowany kurs języka Python

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

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

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

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

Visual Studio instalacja

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

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

Skalowanie i ustawianie arkuszy/układów wydruku w AutoCAD autor: M. Motylewicz, 2012

LABORATORIUM 7 Cel: 1_1

Smarty PHP. Leksykon kieszonkowy

Programowanie komputerowe. Zajęcia 1

Google Earth. Co to jest Google Earth? Co to jest KML? Skąd można pobrać Google Earth?

Microsoft Visual C++

1. Prymitywy graficzne

OpenGL Zaawansowana grafika komputerowa

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

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

Szybkie tworzenie grafiki w GcIde

Obsługa mapy przy użyciu narzędzi nawigacji

WASM AppInventor Lab 3. Rysowanie i animacja po kanwie PODSTAWY PRACY Z KANWAMI

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

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Karty pracy. Ustawienia. W tym rozdziale została opisana konfiguracja modułu CRM Karty pracy oraz widoki i funkcje w nim dostępne.

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

POMOC / INSTRUKCJA OBSŁUGI

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Ćwiczenie 2 Warstwy i kształty podstawowe

Microsoft Small Basic

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Zajęcia nr 15 JavaScript wprowadzenie do JavaScript

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

OpenGL wprowadzenie. O.1 Informacje ogólne 286 O OPENGL WPROWADZENIE

Wykład A1. AutoCAD Dr inż. Jarosław Bydłosz

przedmiot kilka razy, wystarczy kliknąć przycisk Wyczaruj ostatni,

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

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

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

PROSTY PROGRAM DO MALOWANIA

Transkrypt:

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL Dorota Smorawa

Pierwszy program Pierwszy program będzie składał się z trzech etapów: Funkcji rysującej scenę 3D, Inicjacji okna renderingu, Obsługa menu podręcznego

Funkcji rysującej scenę 3D Zawiera składowe: void scena() { zawartość bufora koloru kolor tła czyszczenie bufora dotyczącego koloru kolor prymitywu początek definicji prymitywu kolejne wierzchołki prymitywu koniec definicji prymitywu skierowanie poleceń do wykonania zamiana buforów }

Inicjacji okna renderingu void skalowania (int width, int height) { if (skalowanie = = SKALA_1_1) // obszar renderingu zachowanie proporcji 1:1 { if (width > height) // szerokość okna większa od wysokości okna glviewport ((width - height)/2,0,height,height); else if (width < height) // wysokość okna większa od wysokości okna glviewport (0,(height - width)/2,width,width); } else glviewport (0,0,width,height); // obszar renderingu bez zachowania proporcji generowanie sceny 3D }

Obsługa menu podręcznego void menu (int value) // obsługa menu podręcznego { switch (value) { case CALE_OKNO: // obszar renderingu - całe okno skalowanie = CALE_OKNO; Reshape (glutget (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT)); break; case SKALA_1_1: // obszar renderingu - skala 1:1 skalowanie = SKALA_1_1; Reshape (glutget (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT)); break; case EXIT: // wyjście exit (0); } }

Obsługa menu podręcznego Stałe do obsługi menu podręcznego: enum { gdy nie zachowujemy proporcji gdy zachowujemy proporcje wyjście }; int skalowanie = SKALA_1_1;

Main int main (int argc, char *argv[]) { inicjacja biblioteki GLUT inicjalizacja bufora ramki z podwójnym buforowaniem ustalenie rozmiaru okna programu utworzenie głównego okna programu o podanej nazwie przyłączenie funkcji opisującej scenę 3D przyłączenie funkcji wywoływanej przy zmianie rozmiaru okna utworzenie menu podręcznego dodanie pozycji do menu podręcznego określenie przycisku myszki obsługującej menu podręczne wprowadzenie programu do obsługi pętli komunikatów return 0; }

glclearcolor Ustawia wartości koloru i kanału alfa stosowane w czasie czyszczenia bufora koloru. Funkcja ustala kolor, który będzie stosowany przy czyszczeniu bufora kolorów. Podawane wartości muszą być ograniczone do zakresu [0.0f, 1.0f] void glclearcolor(glclampf red, GLclampf green, GLclampf blue, GLclampf alpha) red składowa czerwona green składowa zielona blue składowa niebieska alpha składowa przezroczystości koloru

glclear Czyści zawartość określonego bufora lub kombinacji buforów void glclear (GL_COLOR_BUFFER_BIT) GL_COLOR_BUFFER_BIT ustawienie bufora kolorów

glcolor3f Funkcja ustala aktualny kolor definiowanego obiektu, pozwalając osobno składowe czerwoną, zieloną i niebieską. Funkcja pozwala też podanie wartości kanału alfa. Każda składowa reprezentowana jest liczbą z zakresu [0 1] void glcolor3f (GLfloat red, GLfloat green, GLfloat blue) red składowa czerwona green składowa zielona blue składowa niebieska alpha składowa przezroczystości koloru

glbegin Funkcja stosowana w połączeniu z funkcją glend do określania wierzchołków obiektów podstawowych biblioteki OpenGl. Wewnątrz jednej pary wywołań glbegin glend można definiować wiele zbiorów wierzchołków pod warunkiem, że będą one tworzyły obiekty podstawowe tego samego rodzaju. Funkcje, które można wywołać wewnątrz pary glbegin, glend glvertex, glcolor, glnormal, glevalcoord, glcalllist, glcalllists, gltexcoord, gledgeflag, glmaterial. void glbegin(plenum mode) mode ta wartość określa obiekt podstawowy, jaki będzie tworzony z wierzchołków. Na przykład GL_POLYGON rysowanie wielokątów wypukłych

glend Oznacza koniec listy wierzchołków definiujących obiekt podstawowy zapoczątkowanej wywołaniem funkcji glbegin void glend ()

glvertex3f Funkcja używana jest do definiowania współrzędnych wierzchołków punktów, linii, wielokątów definiowanych po uprzednim wywołaniu funkcji glbegin void glvertex3f(glfloat x, GLfloat y, GLfloat z) wartość 0.0 x, y, z współrzędne wierzchołka. Jeżeli wartość z nie jest podana, to nadawana jest jej domyślna

glflush ------------------------------------------- glutswapbuffers Czyści bufory i kolejki poleceń OpenGL. Powoduje natychmiastowe wykonanie wszystkich oczekujących poleceń. Operacja ta musi być zakończona w skończonym czasie. void glflush () ------------------------------------------------------- Wykonuje podmianę buforów w trybie podwójnego buforowania. Jeżeli aktualne okno działa w trybie podwójnego buforowania, to funkcja wykonuje wyczyszczenie potoku poleceń OpenGL i podmianę buforów. Dla pojedynczego buforowania funkcja wykonuje jedynie wyczyszczenie potoku poleceń void glutswapbuffers ()

glviewport Ustala część okna, na której może rysować biblioteka OpenGL. Funkcja ustala region wewnątrz okna, stosowany do odwzorowywania współrzędnych przestrzeni ograniczającej na fizyczne współrzędne okna void glviewport(glint x, GLint y, GLsizei width, GLsizei height) x liczba pikseli od lewej strony okna do początku widoku y liczba pikseli od dołu okna do początku widoku width szerokość widoku w pikselach height wysokość widoku w pikselach

glutinit Inicjacja biblioteki GLUT Składnia ------------------------------------------- glutget void glutinit(&argc, argv) ------------------------------------------- Pobiera informacje określone przez parametr int glutget(glenum type) Składnia type na przykład GLUT_WINDOW_WIDTH, GLUT_WINDOW_HEIGHT

glutinitdisplaymode Inicjacja trybu wyświetlania stosowanego przez bibliotekę GLUT w oknach OpenGL. Jest to pierwsza funkcja jaką wywołać musi program korzystający z biblioteki GLUT w celu skonfigurowania okna OpenGL. Funkcja ustala charakter okna, z których biblioteka OpenGL będzie korzystała w czasie rysowania void glutinitdisplaymode(unsigned int mode) Parametry (OR) mode maska lub kombinacja bitowa masek. Można je łączyć za pomocą operacji sumy logicznej (OR). Przykładowe maski GLUT_SINGLE pojedyncze buforowanie okna, GLUT_DOUBLE podwójne buforowanie okna, GLUT_RGB lub GLUT_RGBA okno z trybem kolorów

glutinitwindowsize Określa rozmiar okna renderingu, w którym będzie rysowana scena 3D. void glutinitwindowsize(int width, int height) width szerokość okna height wysokość okna

glutcreatewindow Tworzy okno współpracujące z biblioteką OpenGL. Funkcja tworzy nowe okno, które uznawane jest za aktualne int glutcreatewindow(char *name) name tekst wstawiany do nagłówka okna

glutdisplayfunc Ustala dla aktualnego okna funkcję zwrotną zajmującą się tworzeniem obrazu. Informuje bibliotekę GLUT, którą funkcję należy wywołać, gdy tylko zachodzi potrzeba narysowania zawartości okna. Void glutdisplayfunc(void(*func)(void)) func nazwa funkcji zajmującej się rysowaniem obrazu

glutreshapefunc Dla aktualnego okna ustala funkcję zwrotną zajmującą się obsługą zmian rozmiaru okna. Rejestruje funkcję zwrotną wywoływaną przez bibliotekę GLUT przy każdej zamianie rozmiaru lub kształtu okna. Funkcja zwrotna otrzymuje wartości nowej szerokości i wysokości okna void glutreshapefunc(void (*func)(int width, int height)) func nazwa funkcji wywoływanej przez bibliotekę GLUT przy zmianach rozmiaru okna

glutcreatemenu Tworzy menu podręczne Składnia int glutcreatemenu(void (*func)(int value)) func nazwa funkcji obsługi komunikatów menu. Zwracana wartość to unikatowy numer menu.

glutaddmenuentry Umożliwia dodanie kolejnych pozycji do menu podręcznego. Unikatowość numerów menu zapewnia zastosowanie typu wyliczeniowego. void glutaddmenuentry(char *name, int value) name nazwa pozycji menu value numer unikatowy przekazywany w przypadku wybrania tej pozycji do funkcji obsługującej komunikaty menu

glutattachmenu Funkcja określająca, który przycisk myszki aktywuje menu void glutattachmenu(int button) button GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON

glutmainloop Uruchamia główną pętlę biblioteki GLUT. Zajmuje się obsługą zdarzeń. Obsługiwane są wszystkie komunikaty związane z obsługą klawiatury, myszy, czasomierzy, rysowania i innych. Kończy swoje działanie dopiero wraz z końcem działania programu void glutmainloop() komunikaty menu

Literatura Richard S. Wright jr, Michael Sweet: OpenGL Księga eksperta Wydanie III, Helion2005 Pomoce dydaktyczne i instrukcje, http://icis.pcz.pl/~mkubanek Jackie Neider, Tom Davis, Mason Woo: OpenGL Programming Guide The RedBook Kevin Hawkins, Dave Astle: OpenGL. Programowanie gier, Helion 2003 The official OpenGL web page, http://www.opengl.org http://januszg.hg.pl/opengl/