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

Podobne dokumenty
2 Przygotował: mgr inż. Maciej Lasota

Rzutowanie DOROTA SMORAWA

Janusz Ganczarski. OpenGL Definiowanie sceny 3D

Przekształcenia geometryczne. Dorota Smorawa

Temat: Transformacje 3D

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

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

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

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 6

Trójwymiarowa grafika komputerowa rzutowanie

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

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

Temat: Wprowadzenie do OpenGL i GLUT

Ćwiczenia nr 4. TEMATYKA: Rzutowanie

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

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

Grafika 3D OpenGL część II

3 Przygotował: mgr inż. Maciej Lasota

6 Przygotował: mgr inż. Maciej Lasota

CorelDraw - wbudowane obiekty wektorowe - prostokąty Rysowanie prostokątów

Mapowanie sześcienne otoczenia (cubic environment mapping)

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

Ćwiczenie dodatkowe - Wybrane narzędzia modelowania Zadanie Przygotować model stołu z krzesłami jak na rysunku poniżej(rys. 1).

Edytor tekstu MS Office Word

Grafika Komputerowa Materiały Laboratoryjne

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

Systemy wirtualnej rzeczywistości. Podstawy grafiki 3D

Klawiatura komputerowa.

Klawisze szybkiego wyboru układu drabinkowego

CorelDraw - podstawowe operacje na obiektach graficznych

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

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

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

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

gdzie (4.20) (4.21) 4.3. Rzut równoległy

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

1. Prymitywy graficzne

BRYŁY PODSTAWOWE I OBIEKTY ELEMENTARNE

GRAFIKA KOMPUTEROWA podstawy matematyczne. dr inż. Hojny Marcin pokój 406, pawilon B5 Tel.

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

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

OPENGL PRZEKSZTAŁCENIA GEOMETRYCZNE

e-podręcznik dla seniora... i nie tylko.

Bartosz Bazyluk SYNTEZA GRAFIKI 3D Grafika realistyczna i czasu rzeczywistego. Pojęcie sceny i kamery. Grafika Komputerowa, Informatyka, I Rok

Transformacje obiektów 3D

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

1.1 Zakładka Mapa. Kliknięcie zakładki "Mapa" spowoduje wyświetlenie panelu mapy:

1. Opis okna podstawowego programu TPrezenter.

TWORZENIE OBIEKTÓW GRAFICZNYCH

Architektura interfejsu użytkownika

Mobilne Aplikacje Multimedialne

Przemysław Kajetanowicz Ćwiczenia

Skróty klawiaturowe w systemie Windows 10

Plan wykładu. Akcelerator 3D Potok graficzny

Π 1 O Π 3 Π Rzutowanie prostokątne Wiadomości wstępne

Misja#3. Robimy film animowany.

Spis treści. 1 Moduł Mapy 2

Modelowanie krawędziowe detalu typu wałek w szkicowniku EdgeCAM 2009R1

Uruchamianie programu

Rys.1. Uaktywnianie pasków narzędzi. żądanych pasków narzędziowych. a) Modelowanie części: (standardowo widoczny po prawej stronie Przeglądarki MDT)

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

INSTYTUT INFORMATYKI STOSOWANEJ MODELOWANIE CZĘŚCI Z WYKORZYSTANIEM PROGRAMU SOLID EDGE

Wstęp Pierwsze kroki Pierwszy rysunek Podstawowe obiekty Współrzędne punktów Oglądanie rysunku...

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

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

GRK 2. dr Wojciech Palubicki

Grafika trójwymiarowa

OpenGL transformacje przestrzenne

Oficyna Wydawnicza UNIMEX ebook z zabezpieczeniami DRM

8 Przygotował: mgr inż. Maciej Lasota

Gry Komputerowe Interaktywna kamera FPP

Celem ćwiczenia jest zapoznanie się z podstawowymi funkcjami i pojęciami związanymi ze środowiskiem AutoCAD 2012 w polskiej wersji językowej.

Samouczek edycji dokumentów tekstowych

Gry Komputerowe - laboratorium 2. Kamera FPP / TPP. mgr inż. Michał Chwesiuk 1/11. Szczecin, r

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

Ćwiczenie nr 2 - Rysowanie precyzyjne

Języki formalne i automaty Ćwiczenia 5

RZUTOWANIE PROSTOKĄTNE

Płaszczyzny, Obrót, Szyk

Techniki wstawiania tabel

Laboratorium Programowanie urządzeń mobilnych

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

Ćwiczenie nr 2 - Rysowanie precyzyjne

Maszyny technologiczne. dr inż. Michał Dolata

Zakładka Mapa. Kliknięcie zakładki "Mapa" spowoduje wyświetlenie panelu mapy:

Opis klawiatury komputerowej

Politechnika Warszawska Wydział Mechatroniki Instytut Automatyki i Robotyki

POMIARY WIDEO W PROGRAMIE COACH 5

Zasady rzutowania prostokątnego. metodą europejską. Opracował: Robert Urbanik Zespół Szkół Mechanicznych w Opolu. Zasady rzutowania prostokątnego

Animowana grafika 3D Laboratorium 1

Rozdział 8 Wzory na macierze OpenGL

Spis treści. Konwencje zastosowane w książce...5. Dodawanie stylów do dokumentów HTML oraz XHTML...6. Struktura reguł...9. Pierwszeństwo stylów...

IRONCAD IRONCAD Skróty klawiaturowe

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

Plan wykładu. Wykład 3. Rzutowanie prostokątne, widoki, przekroje, kłady. Rzutowanie prostokątne - geneza. Rzutowanie prostokątne - geneza

Opis ikon OPIS IKON. Ikony w pionowym pasku narzędzi: Ikony te używane są przy edycji mapy. ta ikona otwiera szereg kolejnych ikon, które pozwalają na

Mateusz Bednarczyk, Dawid Chałaj. Microsoft Word Kolumny, tabulatory, tabele i sortowanie

Z ostatniego wzoru i zależności (3.20) można obliczyć n6. Otrzymujemy (3.23) 3.5. Transformacje geometryczne


Transkrypt:

Instrukcja laboratoryjna 9 Grafika komputerowa 3D Temat: Manipulowanie przestrzenią Przygotował: dr inż. Grzegorz Łukawski, mgr inż. Maciej Lasota, mgr inż. Tomasz Michno 1 Wstęp teoretyczny 1.1 Układ współrzędnych W grafice komputerowej 3D wykorzystuje się dwa układy współrzędnych: 1. lewoskrętny 2. prawoskrętny Różnica pomiędzy nimi polega na innym traktowaniu kierunku współrzędnej Z: w układzie lewoskrętnym wartości na osi Z rosną w głąb ekranu, natomiast w prawoskrętnym maleją (zobrazowane na poniższych rysunkach). Biblioteka OpenGL posiada obsługę jedynie układu prawoskrętnego (w DirectX możliwe jest korzystanie z obydwu typów). Fizyczne zamienienie jednego układu w drugi nie jest możliwe. Możliwe jest natomiast udawanie układu lewoskrętnego i odwrotnie poprzez umieszczanie przed każdą współrzędną wierzchołka osi Z znaku minusa. 1/7

1.2 Rzutowanie Rzutowanie jest operacją polegającą na tym, aby odpowiednie piksele na płaskim ekranie były wyświetlane w taki sposób, by sprawiać wrażenie trójwymiarowej głębi (przestrzeni 3D). Rzutowanie również pozwala tworzyć przestrzeń dwuwymiarową 2D dzięki odpowiedniemu przekształceniu. OpenGL wyposażony jest w specjalne funkcje, dzięki którym można uzyskać odpowiedni efekt rzutowania. Wyróżniamy dwa typy rzutowania: 1. rzutowanie perspektywiczne (wykorzystywane w grach 3D), 2. rzutowanie ortogonalne (wykorzystywane w programach typu CAD/CAM). 2/7

1.2.1 Rzutowanie perspektywiczne W rzutowaniu perspektywicznym obiekty położone dalej od kamery są mniejsze od tych położonych bliżej. OpenGL udostępnia specjalną funkcję, która tworzy odpowiednią macierz perspektywy. void gluperspective(gldouble n, GLdouble a, GLdouble zn, GLdouble zf) Funkcja przyjmuje cztery parametry. Pierwszy parametr określa kąt widzenia (w stopniach, zalecana wartość 60 stopni) w pionie. Drugi parametr określa stosunek szerokości do wysokości okna (zazwyczaj podaje się szerokość okna, w którym wyświetlana jest grafika podzieloną przez wysokość). Dwa ostatnie parametry określają granicę przednią i tylną, z reguły parametr zn przyjmuje wartość 1.0. Widok perspektywiczny tworzy stożek widzenia, którego granicami są właśnie granica przednia i tylna. Wszystko co jest w stożku pojawia się na ekranie, obiekty znajdujące się poza stożkiem nie są wyświetlane. Funkcja gluperspective jak można zauważyć, nie należy do biblioteki OpenGL. Jest ona częścią biblioteki GLU (biblioteki pomocniczej). Oryginalną funkcją służącą do ustawiania rzutowania perspektywicznego w bibliotece OpenGL jest glfrustum, gluperspective jest jedynie nakładką na tą funkcje. void glfrustum(gldouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zn, GLdouble zf) Funkcja przyjmuje sześć parametrów. Pierwsze dwa parametry określa prawą i lewą współrzędną pionowej linii obcinania. Kolejne dwa parametry określają górna i dolną współrzędną 3/7

poziomej linii obcinania. Dwa ostatnie parametry określają granicę przednią i tylną. 1.2.2 Rzutowanie ortogonalne Nazywane inaczej rzutowaniem prostokątnym lub równoległym. Polega ono na tym, że każdy obiekt znajdujący się w obszarze rysowania niezależnie od swojej odległości od kamery ma dokładnie tą samą wielkość. W OpenGL dostępna jest specjalna funkcja, która tworzy rzutowanie ortogonalne. void glortho(gldouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far) Funkcja glortho tworzy tzw. bryłę widzenia (bryłę obcinania). Parametry left oraz right określają szerokość bryły, parametry bottom oraz top jej wysokość. Dwa ostatnie parametry near i far określają głębię. W obrębie bryły widzenia tworzone są obiekty, które są wyświetlane na ekranie. To czy obiekt pojawi się na ekranie zależy od tego czy znajdzie się on w obszarze prostopadłościanu. Rzutowanie ortogonalne wykorzystywane jest często w grach 2D oraz programach typu CAD/CAM. 4/7

1.2.3 Kamera Oprócz samego rzutowania w OpenGL bardzo ważną rzeczą jest kamera. Kamera określa położenie obserwatora (w przestrzeni 3D) względem obserwowanych obiektów. OpenGL posiada funkcję tworzącą macierz kamery. void glulookat(gldouble x, GLdouble y, GLdouble z, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz) Funkcja przyjmuje dziewięć argumentów. Pierwsze trzy argumenty (x,y,z) określają położenie kamery w przestrzeni trójwymiarowej. Kolejne trzy argumenty (centerx, centery, centerz) określają punkt na który skierowana jest kamera (patrzy kamera). Ostatnie trzy argumenty (upx, upy, upz) określają wektor pionu kamery, dzięki tym parametrom możliwe jest obracanie kamery. 1.2.4 Macierz rzutowania i modelowania OpenGL oblicza według następującego wzoru pozycję punktu w przestrzeni: [WYJŚCIOWA POZYCJA PUNKTU] = [MACIERZ RZUTOWANIA] * [MACIERZ MODELOWANIA] * [WEJSCIOWA POZYCJA PUNKTU] Dodatkowo w skład macierzy modelowania wchodzą dwie osobne macierze (traktowane jako całość). Pierwszą z nich jest macierz przekształceń (związana z translacją, rotacją i skalowaniem), drugą zaś macierz kamery. 1.2.4.1 Macierz rzutowania (projekcji) Jak sama nazwa wskazuje związana jest z rzutowaniem. Aby umożliwić rzutowanie perspektywiczne lub ortogonalne należy przełączyć się na macierz rzutowania. Do tego celu służy odpowiednia funkcja. void glmatrixmode(gl_projection) Zawsze po załadowaniu macierzy rzutowania należy w OpenGL wywołać funkcje 5/7

odpowiedzialną za załadowanie tzw. macierzy tożsamości glloadidentity (jest to funkcja bezparametrowa). Dopiero po tym możemy ustawić rzutowanie perspektywiczne lub ortogonalne za pomocą odpowiedniej funkcji gluperspective, glortho. 1.2.4.2 Macierz modelowania (widoku modelu) W identyczny sposób przełączamy się na macierz modelowania (widoku modelu), należy pamiętać o tym, że macierz modelowania zawiera w sobie dwie macierze (przekształceń i kamery). OpenGL zajmuje się nimi jako jedną całością. void glmatrixmode(gl_modelview) 1.2.4.3 Funkcja okna widoku Dzięki tej funkcji możliwe jest ustalenie konkretnego okna widoku, czyli obszaru gdzie będzie odbywać się renderowanie (rysowanie). Do tego celu służy funkcja. void glviewport(glint x, GLint y, GLsizei width, GLsizei height) Przyjmuje ona cztery parametry, dwa pierwsza określają współrzędne lewego dolnego narożnika, kolejne dwa wysokość i szerokość obszaru renderowania. Zazwyczaj definiuje się obszar na całe okno, wiec jako pierwsze dwa parametry podaje się (0,0), natomiast kolejne dwa ustawie się na szerokości i wysokość okna. 1.3 Obsługa klawiszy specjalnych W bibliotece OpenGL obsługa klawiszy została podzielona na dwie części: obsługę klawiszy zwykłych (znaki ASCII), omówioną w poprzedniej instrukcji obsługę klawiszy specjalnych (strzałki, F1-F12 itp.) Obsługa klawiszy specjalnych realizowana jest w sposób analogiczny do obsługi zwykłych klawiszy należy zadeklarować funkcję o ustalonych parametrach, a następnie powiadomić o niej bibliotekę GLUT. Szablon funkcji wygląda następująco (warto zwrócić uwagę na parametr key, który jest typu int; dla zwykłych klawiszy używany jest unsigned char): void keyboardspecialkeys(int key, int x, int y) { switch(key) { case GLUT_KEY_UP : puts("naciśnięto strzałkę do góry") break; } 6/7

} Następnie należy powiadomić bibliotekę, która z funkcji będzie odpowiadała za obsługę klawiszy specjalnych: glutspecialfunc(keyboardspecialkeys); Oto najczęściej używane klawisze specjalne: GLUT_KEY_F1, GLUT_KEY_F2,..., GLUT_KEY_F12 klawisze funkcyjne (F1 do F12) GLUT_KEY_PAGE_UP, GLUT_KEY_PAGE_DOWN klawisze Page Up i Page Down GLUT_KEY_HOME, GLUT_KEY_END klawisze Home i End GLUT_KEY_LEFT, GLUT_KEY_RIGHT, GLUT_KEY_UP, GLUT_KEY_DOWN klawisze strzałek GLUT_KEY_INSERT - klawisz Insert 2 Zadania 1. Wypróbuj działanie funkcji glviewport(), sprawdź jej działanie podczas zmieniania rozmiaru okna. 2. Napisz program, który będzie wyświetlał dowolną bryłę (może to być obiekt dostarczany przez GLUT'a, np. teapot). Program powinien posiadać następujące funkcje: możliwość przełączania się pomiędzy typami rzutowania (np. klawisz p - perspektywiczny, o ortogonalny) dla perspektywy dodaj zmianę kąta widzenia (np. kilka przykładowych wartości ustawianych za pomocą klawiszy cyfr) dodaj obsługę kamery (glulookat()), kamera powinna być przesuwana za pomocą strzałek (po dowolnie wybranych dwóch osiach) 7/7