Grafika komputerowa Wstęp do OpenGL

Podobne dokumenty
Grafika komputerowa Wstęp do OpenGL

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

Janusz Ganczarski. OpenGL Pierwszy program

2 Przygotował: mgr inż. Maciej Lasota

Temat: Wprowadzenie do OpenGL i GLUT

Temat: Transformacje 3D

Rzutowanie DOROTA SMORAWA

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

Przekształcenia geometryczne. Dorota Smorawa

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

Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( )

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

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

Janusz Ganczarski. OpenGL Definiowanie sceny 3D

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

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

Grafika Komputerowa Wykład 4. Synteza grafiki 3D. mgr inż. Michał Chwesiuk 1/30

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

Grafika trójwymiarowa

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

Informatyka I : Tworzenie projektu

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

Grafika Komputerowa, Informatyka, I Rok

I. WSTĘP. Przykład 1. Przykład 2. Programowanie czyli tworzenie programów komputerowych (aplikacji komputerowych)

Programowanie Procesorów Graficznych

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

Wprowadzenie do środowiska Qt Creator

I - Microsoft Visual Studio C++

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

KGGiBM GRAFIKA INŻYNIERSKA Rok III, sem. VI, sem IV SN WILiŚ Rok akademicki 2011/2012

Programowanie w języku Python. Grażyna Koba

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Utworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia

Karta przedmiotu. Podstawy programowania procesorów graficznych. realizowanego w ramach projektu PO WER

ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

Zadanie 1. Ściana. 1. Potrzebne zmienne w dołączonym do zadania kodzie źródłowym

Unity 3D - pierwsze skrypty

Wprowadzenie do QT OpenGL

8 Przygotował: mgr inż. Maciej Lasota

BLENDER- Laboratorium 1 opracował Michał Zakrzewski, 2014 r. Interfejs i poruszanie się po programie oraz podstawy edycji bryły

Rysowanie precyzyjne. Polecenie:

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

MentorGraphics ModelSim

Delphi podstawy programowania. Środowisko Delphi

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

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

Wykład 4. Rendering (1) Informacje podstawowe

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

Trójwymiarowa grafika komputerowa rzutowanie

Animowana grafika 3D. Opracowanie: J. Kęsik.

Zad. 6: Sterowanie robotem mobilnym

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Politechnika Warszawska Wydział Mechatroniki Instytut Automatyki i Robotyki

Unity 3D - własny ekran startowy i menu gry

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

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

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

Instalowanie dodatku Message Broadcasting

R 1. Robot o równoległej strukturze kinematycznej i czterech stopniach swobody. Pracownia Nauki Programowania i Aplikacji Robotów Przemysłowych

1.Wstęp. 2.Generowanie systemu w EDK

Plan wykładu. Akcelerator 3D Potok graficzny

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

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

0. OpenGL ma układ współrzędnych taki, że oś y jest skierowana (względem monitora) a) w dół b) w górę c) w lewo d) w prawo e) w kierunku do

1 Temat: Vertex Shader

Grafika 3D OpenGL część II

Informatyka II. Laboratorium Aplikacja okienkowa

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

Zad. 3: Rotacje 2D. Demonstracja przykładu problemu skończonej reprezentacji binarnej liczb

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio

Systemy wirtualnej rzeczywistości. Podstawy grafiki 3D

Utworzenie pliku. Dowiesz się:

LINQ TO XML. Autor ćwiczenia: Marcin Wolicki

Zad. 4: Rotacje 2D. 1 Cel ćwiczenia. 2 Program zajęć. 3 Opis zadania programowego

Tworzenie zespołu. Laboratorium Technik Komputerowych I, Inventor, ćw. 4. Wstawianie komponentów i tworzenie wiązań między nimi.

Programowanie obiektowe

Misja#3. Robimy film animowany.

PRZEWODNIK PO PRZEDMIOCIE

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

Zaawansowane aplikacje internetowe - laboratorium

Praca w środowisku Visual Studio 2008, Visual C

1. Prymitywy graficzne

Programowanie, część III

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

Programowanie niskopoziomowe

Studia Podyplomowe Grafika Komputerowa i Techniki Multimedialne, 2017, semestr II Modelowanie 3D - Podstawy druku 3D. Ćwiczenie nr 4.

Unity. Platforma do tworzenia gier dla różnych systemów docelowych, m.in.: Windows, macos, ios, Android, Powstała w 2005 r., obecnie wersja 5.3.

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Scenariusz lekcji. Scenariusz lekcji 1 TEMAT LEKCJI: 2 CELE LEKCJI: 2.1 Wiadomości: 2.2 Umiejętności: 3 METODY NAUCZANIA: 4 ŚRODKI DYDAKTYCZNE:

BACKUP BAZ DANYCH FIREBIRD

Elementarne obiekty geometryczne, bufory. Dorota Smorawa

Platforma e-learningowa

Układy współrzędnych GUW, LUW Polecenie LUW

KARTA KURSU. Grafika komputerowa

1. Opis okna podstawowego programu TPrezenter.

Tworzenie prezentacji w MS PowerPoint

Rozdział 5. Administracja kontami użytkowników

Jak zamówić zdjęcia przez FotoSender?

Platformy Programowania

Transkrypt:

Instytut Informatyki Politechniki Warszawskiej Grafika komputerowa Wstęp do OpenGL Zbigniew Szymański z.szymanski@ii.pw.edu.pl listopad 2008 - v1 listopad 2010 - v1d kwiecień 2013 v1e

Prowadzący zajęcia: Sprawy organizacyjne /1/ Zbigniew Szymański pok. 361 z.szymanski@ii.pw.edu.pl Rajmund Kożuszek pok. 308 r.kozuszek@ii.pw.edu.pl Michał Kurowski pok. 304 m.kurowski@stud.elka.pw.edu.pl GKOM - OpenGL /2/

Sprawy organizacyjne /2/ Laboratorium nr 3 (czyli dzisiaj) rozdanie projektów + wstęp do OpenGL Laboratorium nr 7 oddanie gotowych rozwiązań (w dowolnym terminie lab. 7, jeśli prowadzący, który wydał projekt prowadzi dany termin) Dzisiejsze zajęcia nie są oceniane. Za projekt można uzyskać maksymalnie 10 pkt. 7 pkt. - spełnienie narzuconych wymagań 3 pkt. - implementacja dodatkowego efektu wizualnego Uwaga warunkiem koniecznym zaliczenia laboratorium jest uzyskanie min. 4 punktów z projektu OpenGL. Deadline: ostatnie zajęcia nr 7 w harmonogramie laboratorium GKOM - OpenGL /3/

Przydatne linki http://www.opengl.org/ Najróżniejsze materiały dotyczące biblioteki OpenGL m.in. Specyfikacja, informacje o nowościach http://nehe.gamedev.net/ NeHe productions OpenGL tutorials samouczki do programowania w OpenGL u z wykorzystaniem biblioteki GLUT. http://www.falloutsoftware.com/tutorials/gl/gl0.htm http://www.opengl.org/documentation/specs/glut/spec3/ spec3.html GKOM - OpenGL /4/

Projekty Tematy projektów: proste programy wizualizujące lub proste gry zręcznościowe. Środowisko programistyczne: VisualStudio 2010, biblioteka OpenGL, biblioteka GLUT Należy przesłać pocztą elektroniczną parozdaniowy bardziej szczegółowy projekt. Celem zajęć jest zapoznanie się z biblioteką OpenGL stosowanie wysokopoziomowych bibliotek nakładek (innych niż GLUT) na OpenGL nie jest dozwolone. Projekty powinny uruchamiać się i kompilować w sali 313. Oddawanie w innych salach lub na własnym sprzęcie nie jest możliwe. Gotowy projekt (kompilowalne źródła + wersja wykonywalna) należy wysłać do prowadzącego w formie jednego pliku *.zip. GKOM - OpenGL /5/

Projekty dobre rady Proszę nie czekać z pisaniem projekty do końca semestru nie ma możliwości przesunięcia ostatecznego terminu. Przed oddaniem projektu proszę wcześniej sprawdzić czy się uruchamia i kompiluje w sali 313. GKOM - OpenGL /6/

Projekty co będzie oceniane Kod źródłowy (powinien być napisany zgodnie z zasadami sztuki programistycznej) Działanie programu. Estetyka wykonania m.in.: Wizualizowane obiekty powinny zajmować centralną część ekranu o rozsądnym rozmiarze (a nie 10x10 pikseli w dolnym lewym rogu ekranu) Wizualizowane obiekty nie powinny lewitować w kosmicznej próżni należy dodać tło w scenie Rozsądne użycie tekstur GKOM - OpenGL /7/

Projekty wymagania techniczne Należy zastosować światła z możliwością regulacji intensywności. Należy pokazać umiejętność teksturowania (co nie oznacza konieczności teksturowania wszystkich obiektów w scenie). W scenie powinny znajdować się elementy ruchome. Ruch kamery / widza (niekoniecznie interaktywny). GKOM - OpenGL /8/

Tematy zadań projektowych Stonoga Pająk Węgorz Ślimak Meduza Rekin Żółw Płaszczka Krewetka Krab Ważka Motyl własne propozycje projektów GKOM - OpenGL /9/

OpenGL Jest to API umożliwiające rysowanie grafiki 2D i 3D. Jest odpowiednikiem Microsoft Direct3D. Standardem zarządza konsorcjum Khronos. Oprócz standardowego OpenGL, istnieje także OpenGL ES (Embedded Standard) oraz OpenGL SC (Safety Critical) Implementacje OpenGL i OpenGL ES istnieją na platformach Windows, Unix, Solaris, Linux, Mac, BeOS/Haiku, Android, Bada, ios, Symbian, PS3... Jest wykorzystywany w Unreal Engine 3, Unigine, id Tech 4, Ogre 3D, World of Warcraft... GKOM - OpenGL /10/

OpenGL krotka historia 1992: 1.0; 1.1 - Vertex Arrays; 1998: 1.2 3D Textures; 1.2.1 rozszerzenia ARB; 2001: 1.3 Multisampling, Multitexturing; 2002: 1.4 Depth Textures, Shadows; 2003: 1.5 Buffer Objects; 2004: 2.0 Shader Objects, Shader Programs, Multiple Render Targets, Non-power-of-two Textures; 2006: 2.1 Pixel Buffer Objects; 2008: 3.0 Framebuffer Objects; 2009: 3.2 - Geometry Shaders; 2010: 4.0 Tesselation Control and Evaluation Shaders; GKOM - OpenGL /11/

Prosty program z wykorzystaniem OpenGL /1/ Uruchamiamy Visual Studio 2008 Menu Start Programy Microsoft Visual Studio 2008 Microsoft Visual Studio 2008 1 2 GKOM - OpenGL /12/

Prosty program /2/ Zamykamy Start Page Tworzymy nowy projekt: File New Project 2 1 GKOM - OpenGL /13/

Prosty program... /3/ Typ projektu (Visual C++ Win32 Win32 Console App.), Nazwa (opengl_wstep) Położenie projektu (z:\), wyłączyć create directory for solution 1 2 4 3 5 GKOM - OpenGL /14/

Prosty program /4/ W ustawieniach Application settings wyłączamy Precompiled headers i zaznaczamy Empty project 1 3 2 4 GKOM - OpenGL /15/

Prosty program /5/ Kopiujemy wszystkie pliki z katalogu: \\NETGRAF\temporary\GKOM\OpenGL\zsz\ do katalogu z projektem: z:\opengl_wstep Dodajemy plik gkom.cpp do projektu Project Add Existing Item 2 1 3 GKOM - OpenGL /16/

Prosty program /6/ Kompilacja projektu: Build Build opengl_wstep Komunikaty dotyczące w kompilacji pojawiają się w oknie Output: GKOM - OpenGL /17/

Prosty program /7/ Uruchomienie programu: Debug Start Debugging GKOM - OpenGL /18/

Biblioteka GLUT Biblioteka GLUT (OpenGL Utility Toolkit) umożliwia: obsługę okien niezależną od systemu operacyjnego obsługę zdarzeń timery i funkcję Idle wykonywaną, gdy nic w systemie się nie dzieje funkcje do generowania różnych brył Biblioteka GLUT jest dostępna dla różnych systemów operacyjnych (m.in. Windows i Linux) Nazwy funkcji z biblioteki GLUT posiadają przedrostek glut, a z biblioteki OpenGL przedrostek gl GKOM - OpenGL /19/

Oglądamy kod Otwieramy plik gkom.cpp 1 GKOM - OpenGL /20/

Funkcja main glutinit( &argc, argv ); glutinitdisplaymode( Funkcja dokonuje inicjalizacji biblioteki GLUT GLUT_SINGLE oraz inicjuje współpracę GLUT_RGBA z systemem GLUT_DEPTH okienkowym. ); glutinitwindowposition( 0, 0 ); glutinitwindowsize( 250, 250 ); glutcreatewindow( "GKOM lab. 3: OpenGL" ); glutdisplayfunc( display ); glutreshapefunc( reshape ); init(); glutmainloop(); GKOM - OpenGL /21/

Pytanie? Co to jest bufor głębokości (inaczej zwany z-buforem)? Co to jest pojedyncze / podwójne buforowanie? GKOM - OpenGL /22/

Funkcja main glutinit( &argc, argv ); glutinitdisplaymode( GLUT_SINGLE GLUT_RGBA GLUT_DEPTH ); glutinitwindowposition( Ustawia tryb wyświetlania: 0, 0 ); glutinitwindowsize( 250, 250 ); glutcreatewindow( GLUT_SINGLE maska bitowa wybierająca pojedyncze buforowanie okna. "GKOM lab. 3: OpenGL" ); glutdisplayfunc( GLUT_RGBA tryb display wyświetlania ); RGB (, a glutreshapefunc( nie tryb indeksowany). reshape ); init(); GLUT_DEPTH tworzone okno będzie glutmainloop(); posiadało bufor głębokości. GKOM - OpenGL /23/

Funkcja main glutinit( &argc, argv ); glutinitdisplaymode( GLUT_SINGLE GLUT_RGBA GLUT_DEPTH ); glutinitwindowposition( 0, 0 ); glutinitwindowsize( 250, 250 ); glutcreatewindow( Ustalenie położenia i rozmiaru okna. "GKOM lab. 3: OpenGL" ); glutdisplayfunc( display ); glutreshapefunc( reshape ); init(); glutmainloop(); GKOM - OpenGL /24/

Funkcja main glutinit( &argc, argv ); glutinitdisplaymode( GLUT_SINGLE GLUT_RGBA GLUT_DEPTH ); glutinitwindowposition( 0, 0 ); glutinitwindowsize( 250, 250 ); glutcreatewindow( "GKOM lab. 3: OpenGL" ); glutdisplayfunc( Utworzenie okna. Parametrem display funkcji ); jest glutreshapefunc( tytuł okna pojawiający reshape się w pasku ); tytułu okna init(); aplikacji. glutmainloop(); GKOM - OpenGL /25/

Funkcja main glutinit( &argc, argv ); glutinitdisplaymode( GLUT_SINGLE GLUT_RGBA GLUT_DEPTH Rejestracja ); funkcji callback (wywoływanej glutinitwindowposition( gdy zajdzie określone zdarzenie) 0, 0 ); glutinitwindowsize( odpowiedzialnej za odrysowanie 250, zawartości 250 ); glutcreatewindow( okna. Funkcja display jest zaimplementowana przez użytkownika. "GKOM lab. 3: OpenGL" ); glutdisplayfunc( display ); glutreshapefunc( reshape ); init(); glutmainloop(); GKOM - OpenGL /26/

Funkcja main glutinit( &argc, argv ); glutinitdisplaymode( GLUT_SINGLE GLUT_RGBA GLUT_DEPTH ); glutinitwindowposition( 0, 0 ); glutinitwindowsize( 250, 250 ); glutcreatewindow( Rejestracja funkcji callback wywoływanej gdy zmieni się rozmiar okna. Funkcja reshape "GKOM lab. 3: OpenGL" ); jest zaimplementowana przez użytkownika. glutdisplayfunc( display ); glutreshapefunc( reshape ); init(); glutmainloop(); GKOM - OpenGL /27/

Funkcja main glutinit( &argc, argv ); glutinitdisplaymode( Funkcja init jest zaimplementowana przez użytkownika. Dokonuje ustawienia oświetlenia GLUT_SINGLE GLUT_RGBA GLUT_DEPTH i spraw ); związanych z cieniowaniem. glutinitwindowposition( Funkcja glutmainloop rozpoczyna 0, 0 ); glutinitwindowsize( przetwarzanie zdarzeń przez 250, system 250 odbiera ); glutcreatewindow( informacje o zachodzących zdarzeniach i wywołuje "GKOM stosowne lab. 3: procedury OpenGL" obsługi ); glutdisplayfunc( zdarzeń. display ); glutreshapefunc( reshape ); init(); glutmainloop(); GKOM - OpenGL /28/

glclear( Funkcja display GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT ); displayobjects(); Funkcja powodująca wyczyszczenie glflush(); wskazanych buforów: bufora kolorów (przechowującego obraz sceny) oraz bufora głębokości (z-bufora). GKOM - OpenGL /29/

glclear( Funkcja display GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT ); displayobjects(); glflush(); Nasza funkcja wyświetlająca scenę. GKOM - OpenGL /30/

glclear( Funkcja display GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT ); displayobjects(); glflush(); W różnych implementacjach OpenGL a polecenia są buforowane. Funkcja glflush powoduje opróżnienie tych buforów, co skutkuje wykonaniem wydanych poleceń tak szybko, jak umożliwia to silnik renderujący. GKOM - OpenGL /31/

Tworzenie nowych obiektów Układ współrzędnych stosowany w OpenGL u [http://www.falloutsoftware.com/tutorials/gl/] Nowe obiekty tworzone są w środku układu współrzędnych. GKOM - OpenGL /32/

Funkcja displayobjects W funkcji displayobjects znajdują się wywołania 4 funkcji tworzących obiekty w scenie: glutsolidtorus( 0.275, 0.85, 10, 10 ); Tworzy torus parametry: promień wewnętrzny, promień zewnętrzny, liczba odcinków każdej sekcji radialnej, liczba sekcji radialnych glutsolidcube( 1.5 ); Tworzy sześcian o podanym boku. glutsolidsphere( 1.0, 10, 10 ); Tworzy kulę parametry: promień, liczba podziałów wokół osi Z, liczba podziałów wzdłuż osi Z. glutsolidteapot( 1.0 ); Tworzy czajnik o podanym rozmiarze. GKOM - OpenGL /33/

Pytanie? Co to są współrzędne jednorodne? Co to są macierze przekształceń? GKOM - OpenGL /34/

Transformacje na obiektach /1/ Wszystkie transformacje geometryczne (obroty, translacje, skalowanie) wykonywane są OpenGL u w formie działań na macierzach. W momencie wywołania funkcji tworzącej obiekt, jego wierzchołki są wymnażane przez macierz aktualnego przekształcenia. Wywołania funkcji dokonujących transformacji (obroty, translacje, skalowanie) powodują wymnożenie macierzy aktualnego przekształcenia przez macierz określonej transformacji. GKOM - OpenGL /35/

Transformacje na obiektach /2/ Przykład: Na wierzchołku o współrzędnych P chcemy dokonać trzech transformacji opisywanych przez macierze T 1, T 2, T 3. Policzyć współrzędne wierzchołka po tych transformacjach. Współrzędne wierzchołka po transformacji T 1 : P 1 =T 1 *P Współrzędne wierzchołka po transformacji T 2 : P 2 =T 2 *P 1 =T 2 *T 1 *P Współrzędne wierzchołka po transformacji T 3 : P 3 =T 3 *P 2 =T 3 *T 2 *T 1 *P Macierz aktualnego przekształcenia Aby wykonać w kolejności transformacje T 1, T 2, T 3 ich macierze musimy wymnożyć w odwrotnej kolejności! GKOM - OpenGL /36/

Funkcje dokonujące transformacji glrotatef( 100.0, 1.0, 0.0, 0.0 ); kąt, współrzędne punktu definiującego oś obrotu Funkcja wymnażająca macierz aktualnego przekształcenia przez macierz reprezentującą obrót o kąt podany jako pierwszy parametr funkcji. Obrót dokonywany jest wokół osi przechodzącej przez punkt (0,0,0) i punkt, którego współrzędne są podane jako pozostałe trzy parametry funkcji. gltranslatef( -0.80, 0.35, 0.0 ); Funkcja wymnażająca macierz aktualnego przekształcenia przez macierz reprezentującą przesunięcie o podany wektor. glscalef(1.0,1.0,1.0); Funkcja wymnażająca macierz aktualnego przekształcenia przez macierz reprezentującą skalowanie. GKOM - OpenGL /37/

Stos macierzy Funkcja glpushmatrix() odkłada macierz aktualnego przekształcenia na stos. Funkcja glpopmatrix() zdejmuje ze stosu macierz przekształcenia. Macierz ta staje się macierzą aktualnego przekształcenia. Operacje te umożliwiają szybkie przywrócenie macierzy aktualnego przekształcenia bez konieczności wywoływania sekwencji funkcji glrotatef, glscalef, gltranslatef GKOM - OpenGL /38/

Oglądamy kod Na podstawie zawartości funkcji displayobjects proszę ustalić, jakie przekształcenia zostaną zastosowane do torusa (w jakiej kolejności)? GKOM - OpenGL /39/

Torus /1/ glrotatef( 30.0, 1.0, 0.0, 0.0 ); gltranslatef( -0.80, 0.35, 0.0 ); glrotatef( 100.0, 1.0, 0.0, 0.0 ); glutsolidtorus( 0.275, 0.85, 10, 10 ); Powyższą sekwencję można sobie wyobrazić jako: 1. Utworzenie torusa w środku układu współrzędnych w płaszczyźnie XY. 2. Obrót torusa o 100 stopni wokół osi X. 3. Przesunięcie torusa w lewo i do góry o wektor [-0.8, 0.35, 0.0] 4. Obrót torusa o 30 stopni wokół osi X. GKOM - OpenGL /40/

Torus /2/ y x GKOM - OpenGL /41/

Włączenie podwójnego buforowania /1/ Proszę włączyć tryb podwójnego buforowania dodając w funkcji main elementy zaznaczone na pomarańczowo. glutinitdisplaymode( GLUT_DOUBLE GLUT_RGBA GLUT_DEPTH ); glutinitwindowposition( 0, 0 ); glutinitwindowsize( 250, 250 ); glutcreatewindow( "GKOM lab. 3: OpenGL" ); glutdisplayfunc( display ); glutreshapefunc( reshape ); glutidlefunc( display ); Funkcja Idle jest wywoływana, gdy system nie ma nic innego do wykonania posłuży do animacji sceny. Proszę skompilować i uruchomić program. O czym zapomnieliśmy? GKOM - OpenGL /42/

Włączenie podwójnego buforowania /2/ Zapomnieliśmy o przełączaniu buforów. Rysowanie odbywało się na buforze, który nie był wyświetlany. Proszę włączyć przełączanie buforów dodając w funkcji display elementy zaznaczone na pomarańczowo. glclear( GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT ); displayobjects(); glflush(); glutswapbuffers(); Proszę skompilować i uruchomić program. GKOM - OpenGL /43/

Zadanie Wpraw torus w obrót dookoła własnej osi X. GKOM - OpenGL /44/

Obrót torusa /1/ Należy dodać w funkcji display elementy zaznaczone na pomarańczowo. Parametryzujemy funkcję displayobjects numerem ramki. static int frame_no=0; glclear( GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT ); if (frame_no<360) frame_no++; else frame_no=0; displayobjects(frame_no); glflush(); glutswapbuffers(); GKOM - OpenGL /45/

Zadanie Proszę dwukrotnie zmniejszyć obiekty modyfikując parametry funkcji, które je tworzą. GKOM - OpenGL /46/

Zmiana trybu cieniowania Proszę włączyć tryb cieniowania interpolowanego zmieniając w funkcji init element zaznaczony na pomarańczowo. glshademodel( GL_SMOOTH ); Proszę skompilować i uruchomić program. GKOM - OpenGL /47/

Zadanie Wpraw kulę i torus w obrót wokół osi Y. Wpraw czajnik i sześcian w obrót wokół osi Y w przeciwną stronę. y x GKOM - OpenGL /48/

Rzutowanie Biblioteka OpenGL dokonując obliczeń związanych z rzutowaniem posługuje się drugą macierzą przekształcenia tzw. macierzą rzutowania. Modyfikacji tej macierzy można dokonać po przełączeniu trybu macierzy na GL_PROJECTION wywołując funkcję: glmatrixmode( GL_PROJECTION ); Powrót do trybu macierzy modelu dokonujemy wywołując funkcję: glmatrixmode( GL_MODELVIEW ); Można sobie wyobrazić, że przekształcenia dokonywane w trybie GL_MODELVIEW odnoszą się do obiektów w scenie, zaś w trybie GL_PROJECTION do obserwatora/kamery. GKOM - OpenGL /49/

Rzutowanie równoległe Macierz rzutowania dla rzutu równoległego ustawiana jest przy pomocy funkcji glortho. glortho(x_left,x_right,y_bottom,y_top,z_near,z_far); Parametry funkcji definiują (współrzędne) bryłę obcinania. źródło: [http://kursy.ddt.pl/?lessonid=181] GKOM - OpenGL /50/

Rzutowanie równoległe funkcja reshape if( h > 0 && w > 0 ) { glviewport( 0, 0, w, h ); glmatrixmode( GL_PROJECTION ); Ustala obszar okna przeznaczony do glloadidentity(); wykorzystania przez OpenGL. Parametry if( w <= h ) { określają współrzędne wewnątrz okna. glortho(-2.25,2.25,-2.25*h/w,2.25*h/w, -10.0, 10.0 ); } else { glortho(-2.25*w/h,2.25*w/h,-2.25,2.25, -10.0, 10.0 ); } glmatrixmode( GL_MODELVIEW ); } GKOM - OpenGL /51/

Rzutowanie równoległe funkcja reshape if( h > 0 && w > 0 ) { glviewport( 0, 0, w, h ); glmatrixmode( GL_PROJECTION ); glloadidentity(); if( w <= h ) { Włączenie trybu macierzy rzutowania. glortho(-2.25,2.25,-2.25*h/w,2.25*h/w, Do macierzy -10.0, rzutowania 10.0 ); wpisywana jest } macierz jednostkowa. else { glortho(-2.25*w/h,2.25*w/h,-2.25,2.25, -10.0, 10.0 ); } glmatrixmode( GL_MODELVIEW ); } GKOM - OpenGL /52/

Rzutowanie równoległe funkcja reshape if( h > 0 && w > 0 ) { glviewport( 0, 0, w, h ); glmatrixmode( GL_PROJECTION ); glloadidentity(); if( w <= h ) { glortho(-2.25,2.25,-2.25*h/w,2.25*h/w, -10.0, 10.0 ); } else { glortho(-2.25*w/h,2.25*w/h,-2.25,2.25, -10.0, 10.0 ); } Ustalenie bryły obcinania, w zależności od glmatrixmode( GL_MODELVIEW ); tego czy okno jest dłuższe czy szersze. } GKOM - OpenGL /53/

Rzutowanie równoległe funkcja reshape if( h > 0 && w > 0 ) { glviewport( 0, 0, w, h ); glmatrixmode( GL_PROJECTION ); glloadidentity(); if( w <= h ) { glortho(-2.25,2.25,-2.25*h/w,2.25*h/w, -10.0, 10.0 ); } else { glortho(-2.25*w/h,2.25*w/h,-2.25,2.25, Włączenie -10.0, trybu 10.0 macierzy ); modelu. } glmatrixmode( GL_MODELVIEW ); } GKOM - OpenGL /54/

Rzutowanie perspektywiczne Macierz rzutowania dla rzutu perspektywicznego ustawiana jest przy pomocy funkcji glfrustum. glfrustum(x_left,x_right,y_bottom,y_top,d_near,d_far); Oko obserwatora jest początkowo umieszczone w punkcie (0,0,0). Obraz jest rzutowany na płaszczyznę near (ekran komputera). źródło: [http://kursy.ddt.pl/?lessonid=181] d_near, d_far są odległościami od oka obserwatora do płaszczyzn near i far. Muszą być dodatnie. GKOM - OpenGL /55/

Zadanie Włącz rzutowanie perspektywiczne GKOM - OpenGL /56/

Zadanie Zmodyfikuj program tak aby obserwator okrążał scenę w płaszczyźnie XZ. Należy zmodyfikować funkcję display: 1. Przełącz tryb macierzy na tryb rzutowania 2. Zapamiętaj stan aktualnej macierzy 3. Dokonaj obrotu 4. Przełącz tryb macierzy na tryb modelu 5. Wyświetl obiekty 6. Przełącz tryb macierzy na tryb rzutowania 7. Odtwórz stan macierzy GKOM - OpenGL /57/

Vertex Arrays przykładowy program Proszę skopiować zawartość pliku gkom.cpp do innego pliku (jeśli ma być jeszcze później wykorzystany). Kopiujemy zawartość pliku: \\Netgraf2\temporary\GKOM\opengl\VAProject\gkom_va.cpp do pliku: gkom.cpp Kopiujemy pliki girl.obj oraz viking.obj z katalogu \\Netgraf2\temporary\GKOM\opengl\VAProject do katalogu z projektem (nie dodajemy do projektu!). Proszę przekompilować i uruchomić projekt. GKOM - OpenGL /58/

Vertex Arrays Umożliwiają rysowanie dowolnych wielokątów. Aby z nich skorzystać, należy włączyć odpowiednie opcje: glenableclientstate( GL_VERTEX_ARRAY ); glenableclientstate( GL_NORMAL_ARRAY ); Umożliwia to podanie odpowiednich wskaźników na dane: glvertexpointer( 3, GL_FLOAT, 0, vs); glnormalpointer( GL_FLOAT, 0, ns); Mając ustalone źródła danych, możemy przystąpić do rysowania podając indeksy kolejnych wierzchołków: gldrawelements( GL_TRIANGLES, count, GL_UNSIGNED_SHORT, is); GKOM - OpenGL /59/

KONIEC