Rzutowanie DOROTA SMORAWA

Podobne dokumenty
Janusz Ganczarski. OpenGL Definiowanie sceny 3D

Przekształcenia geometryczne. Dorota Smorawa

2 Przygotował: mgr inż. Maciej Lasota

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

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

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

Janusz Ganczarski. OpenGL Pierwszy program

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

Materiały. Dorota Smorawa

Mieszanie kolorów. Dorota Smorawa

Elementarne obiekty geometryczne, bufory. Dorota Smorawa

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 6

Temat: Transformacje 3D

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

PRZEWODNIK PO PRZEDMIOCIE

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

OPENGL PRZEKSZTAŁCENIA GEOMETRYCZNE

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

Tekstury. Dorota Smorawa

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

Ćwiczenia nr 4. TEMATYKA: Rzutowanie

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

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

Grafika 3D OpenGL część II

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

System graficzny. Potok graficzny 3D. Scena 3D Zbiór trójwymiarowych danych wejściowych wykorzystywanych do wygenerowania obrazu wyjściowego 2D.

DARMOWA PRZEGLĄDARKA MODELI IFC

Trójwymiarowa grafika komputerowa rzutowanie

OpenGL transformacje przestrzenne

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

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

Grafika Komputerowa Materiały Laboratoryjne

Rozdział 8 Wzory na macierze OpenGL

TWORZENIE OBIEKTÓW GRAFICZNYCH

Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( )

Definicja obrotu: Definicja elementów obrotu:

INSTRUKCJE REPETYCYJNE PĘTLE

Ćwiczenie nr 10 Bloki Dynamiczne

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

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

Rysowanie skosów, okien dachowych, otworów w skośnych sufitach

Grafika komputerowa Wstęp do OpenGL

GRK 2. dr Wojciech Palubicki

Laboratorium Programowanie urządzeń mobilnych

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

Kolejną czynnością będzie wyświetlenie dwóch pasków narzędzi, które służą do obsługi układów współrzędnych, o nazwach LUW i LUW II.

1. Opis okna podstawowego programu TPrezenter.

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

Łożysko z pochyleniami

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

Rysunek 1: Okno timeline wykorzystywane do tworzenia animacji.

RYSUNEK TECHNICZNY I GEOMETRIA WYKREŚLNA INSTRUKCJA DOM Z DRABINĄ I KOMINEM W 2D

Ćwiczenie pochodzi ze strony

ANALIZA I INDEKSOWANIE MULTIMEDIÓW (AIM)

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

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

Edytor tekstu MS Office Word

POMIARY WIDEO W PROGRAMIE COACH 5

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

Koło zębate wału. Kolejnym krokiem będzie rozrysowanie zębatego koła przeniesienia napędu na wał.

PikoCNC skróty klawiaturowe

CorelDraw - podstawowe operacje na obiektach graficznych

Misja#3. Robimy film animowany.

Opis klawiatury komputerowej

Część 4 życie programu

Ćwiczenie 5: Analiza pól elektromagnetycznych w programie FEMM cz. 1

Wektory i macierze w OpenGL

- biegunowy(kołowy) - kursor wykonuje skok w kierunku tymczasowych linii konstrukcyjnych;

Grafika komputerowa Wstęp do OpenGL

Przeciąganie, rzutowanie, płaszczyzna konstrukcyjna

1.1. Przykład projektowania konstrukcji prętowej z wykorzystaniem ekranów systemu ROBOT Millennium

Wykład 4. Rendering (1) Informacje podstawowe

AUTOCAD MIERZENIE I PODZIAŁ

KATEDRA MECHANIKI I PODSTAW KONSTRUKCJI MASZYN. Instrukcja do ćwiczeń laboratoryjnych z elementów analizy obrazów

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

1 Podstawy c++ w pigułce.

RZUTOWANIE PROSTOKĄTNE

I - Microsoft Visual Studio C++

Przykład zastosowania poleceń 3DWYRÓWNAJ i RÓŻNICA

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

Programowanie strukturalne i obiektowe

1. Wprowadzenie. 1.1 Uruchamianie AutoCAD-a Ustawienia wprowadzające. Auto CAD Aby uruchomić AutoCada 14 kliknij ikonę

Języki formalne i automaty Ćwiczenia 5

tak jak jest to przedstawione na rysunku powyżej (pierwszy etap ćwiczenia)

Studium podyplomowe. Programowanie w OpenGL. Michał Turek, AGH Kraków

Temat: Wprowadzenie do OpenGL i GLUT

IRONCAD. TriBall IRONCAD Narzędzie pozycjonujące

Tworzenie nowego rysunku Bezpośrednio po uruchomieniu programu zostanie otwarte okno kreatora Nowego Rysunku.

Animowana grafika 3D Laboratorium 1

Fragment tekstu zakończony twardym enterem, traktowany przez edytor tekstu jako jedna nierozerwalna całość.

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

Rysowanie precyzyjne. Polecenie:

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

1 Podstawy c++ w pigułce.

Architektura interfejsu użytkownika

PRZEWODNIK PO PRZEDMIOCIE

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

Programowanie komputerowe. Zajęcia 7

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

Ćwiczenie nr 2 - Rysowanie precyzyjne

Transkrypt:

Rzutowanie DOROTA SMORAWA

Rzutowanie Rzutowanie jest operacja polegająca 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ń dwuwymiarowa 2D dzięki odpowiedniemu przekształceniu. Biblioteka OpenGL wyposażona jest w funkcje umożliwiające uzyskanie odpowiedniego efektu rzutowania. Wyróżniane są dwa typy rzutowania: - perspektywiczne - glfrustum oraz gluperspective, - ortogonalne (prostokątne) glortho.

Rzutowanie void Reshape( int width, int height ) { // obszar renderingu - całe okno glviewport (0,0,width,height); // wybór macierzy rzutowania glmatrixmode (GL_PROJECTION); // macierz rzutowania = macierz jednostkowa glloadidentity (); // ustawienie parametrów zakresu rzutni GLdouble aspect = 1; GLfloat zakres = 5.0f; GLfloat blisko = 1.0f; GLfloat daleko = 10.0f;

Rzutowanie ortogonalne if (rzut == ORTO) { if (skala == ASPECT_1_1) { if (width < height && width > 0) glortho (-zakres,zakres,-zakres*height/width,zakres*height/width,-zakres,zakres); else if (width >= height && height > 0) glortho (-zakres*width/height,zakres*width/height,-zakres,zakres,-zakres,zakres); } else glortho (-zakres,zakres,-zakres,zakres,-zakres,zakres); }

Rzutowanie perspektywiczne if (rzut==frust) { if (skala==aspect_1_1) { if (width < height && width > 0) glfrustum (-zakres,zakres,-zakres*height/width,zakres*height/width,blisko,daleko); else if (width >= height && height > 0) glfrustum (-zakres*width/height,zakres*width/height,-zakres,zakres,blisko,daleko); } else glfrustum (-zakres,zakres,-zakres,zakres,blisko,daleko); }

Rzutowanie perspektywiczne if (rzut==persp) { if (height > 0) aspect = width/(gldouble)height; gluperspective (fovy,aspect,blisko,daleko); } } // generowanie sceny 3D Display();

Funkcja menu void Menu( int value ) { switch (value) { // wyjście case EXIT: exit (0); case FULL_WINDOW: skala=full_window; Reshape (glutget (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT)); break;

Funkcja menu case ASPECT_1_1: skala=aspect_1_1; Reshape (glutget (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT)); break; case ORTO: rzut=orto; Reshape (glutget (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT)); break;

Funkcja menu case FRUST: rzut=frust; Reshape (glutget (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT)); break; case PERSP: rzut=persp; Reshape (glutget (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT)); } break; }

Menu Uzupełniamy w funkcji main wywołanie funkcji menu o kolejne pola: glutcreatemenu( Menu ); // dodadnie pozycji do menu podręcznego glutaddmenuentry ("Rodzaj skalowania - całe okno",full_window); glutaddmenuentry ("Rodzaj skalowania - skala 1:1",ASPECT_1_1); glutaddmenuentry ("Rzutowanie ortogonalne", ORTO); glutaddmenuentry ("Rzutowanie frustum", FRUST); glutaddmenuentry ("Rzutowanie perspective", PERSP); glutaddmenuentry ("Wyjście",EXIT);

Funkcja klawiatury Biblioteka OpenGL umożliwia nam posługiwanie się klawiszami podstawowymi klawiatury. Do obsługi klawiszy należy zdefiniować funkcję realizującą polecenia wywoływane wciskaniem poszczególnych klawiszy. Funkcję klawiatury wywołujemy w funkcji main za pomocą polecenia: // dołączenie funkcji obsługi klawiatury glutkeyboardfunc (Funkcja_klawiatury);

Funkcja klawiatury void Funkcja_klawiatury (unsigned char key, int x, int y) { // klawisz + if (key == 'l') { xx=0; yx=1; zx=0; obrot_x=obrot_x+5; }

Funkcja klawiatury if (key == 'r') { xx=0; yx=1; zx=0; obrot_x=obrot_x-5; }

Funkcja klawiatury if (key == 'u') { xy=1; yy=0; zy=0; obrot_y=obrot_y+5; }

Funkcja klawiatury if (key == 'd') { xy=1; yy=0; zy=0; obrot_y=obrot_y-5; } // odrysowanie okna Reshape (glutget (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT)); }

Obrót i przesunięcie Ustaliliśmy sobie w ten sposób, co ma się dziać po wciśnięciu klawiszy u,d,l,r, czyli u to obrót do góry, d to obrót na dół, l to obrót w lewo, a r to obrót w prawo. Funkcje odpowiadające za obrót umieszczamy przed zdefiniowaniem obiektu, którym chcemy obracać, a więc albo w funkcji rysującej wszystkie obiekty na scenie i wywoływanej w funkcji sceny, albo, jeśli obiekty rysujemy bezpośrednio w funkcji sceny, tuż przed zdefiniowaniem takiego obiektu. Do obrotu służy funkcja glrotate: // obrót wokół osi y dla klawiszy l i r glrotatef(obrot_x, 0.0f, 1.0f, 0.0f); // obrót wokół osi x dla klawiszy u i d glrotatef(obrot_y, xy, yy, zy);

Obrót i przesunięcie Możemy dokonywać przesuwania obiektów za pomocą funkcji gltranslate. Możemy również konfigurować początkowe położenie obserwatora poprzez przesunięcie całego układy kartezjańskiego współrzędnych. // przesunięcie obiektu o wektor [0,0,-3] gltranslatef (0.0f,0.0f,-3.0f);

Opis funkcji glmatrixmode składnia Określa aktualnie używaną macierz. Pozwala określić, który stos macierzy będzie stosowany w czasie manipulacji na macierzach void glmatrixmode (GLenum mode) parametry mode określa stos macierzy: GL_MODELVIEW stos macierzy modelwidok (do przemieszczania obiektów na scenie), GL_PROJECTION stos macierzy rzutowania (do definiowania przestrzeni ograniczającej), GL_TEXTURE stos macierzy tekstur (do manipulowania współrzędnymi tekstur)

Opis funkcji gltranslatef składnia parametry Mnoży aktualną macierz przez macierz przesunięcia. Powstała w ten sposób macierz staje się aktualną macierzą przekształceń void gltranslatef (GLfloat x, GLfloat y, GLfloat z) x, y, z współrzędne wektora przesunięcia

Opis funkcji glulookat składnia parametry Definiuje przekształcenie punktu widzenia. Na podstawie pozycji oka, środka sceny i wektora wskazującego górę perspektywy widza, funkcja tworzy przekształcenie punktu widzenia void glulookat (GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz) eyex, eyey, eyez współrzędne x, y, z oka, centerx, centery, centerz współrzędne x, y, z środka sceny, na którą patrzymy upx, upy, upz współrzędne x, y, z definiujące wektor wskazujący w górę

Opis funkcji glloadidentity składnia Nadaje aktualnej macierzy wartości macierzy jednostkowej. W ten sposób aktualny układ współrzędnych staje się zgodny z układem współrzędnych okna void glloadidentity (void)

Opis funkcji glortho składnia parametry Definiuje przestrzeń ograniczającą rzutowania prostopadłego. Obiekty znajdujące się daleko od widza nie są pomniejszane void glortho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far) left najbardziej wysunięta w lewą stronę współrzędna right najbardziej wysunięta w prawą stronę współrzędna bottom najbardziej wysunięta w dół współrzędna top najbardziej wysunięta w górę współrzędna near odległość od widza bliskiej płaszczyzny ograniczającej far odległość od widza odległej płaszczyzny ograniczającej

Opis funkcji glfrustum Tworzy macierz perspektywy, dzięki której można uzyskać rzutowanie perspektywiczne składnia void glfrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble znear, GLdouble zfar) parametry lef, right współrzędne lewej i prawej płaszczyzny ograniczającej bottom, top współrzędne dolnej i górnej płaszczyzny ograniczającej znear, zfar współrzędne bliskiej i dalekiej płaszczyzny ograniczającej. Obie wartości muszą być dodatnie.

Opis funkcji glutkeyboardfunc składnia Ustala dla aktualnego okna funkcję zwrotną zajmującą się obsługą klawiatury. Rejestruje funkcję zwrotną, gdy tylko zostanie naciśnięta kombinacja klawiszy generujących jakiś znak ASCII void glutkeyboardfunc (void (*func) (unsigned char key, int x, int y)) parametry func nazwa funkcji wywoływanej przez bibliotekę GLUT przy naciśnięciu klawisza

Opis funkcji glutspecialfunc Składnia parametry Dla aktualnego okna ustala funkcję zwrotną obsługującą naciśnięcia klawiszy niegenerujących znaków ASCII. Dodatkowo podawane są aktualne współrzędne x i y kursora myszy void glutspecialfunc (void (*func) (int key, int x, int y)) func nazwa funkcji wywoływanej przez bibliotekę GLUT przy naciśnięciu klawiszy niegenerujących znaków ASCII (GLUT_KEY_F1, GLUT_KEY_RIGHT itd.)

Opis funkcji glrotatef Wykonuje obrót aktualnej macierzy zgodnie z podaną macierzą obrotu składnia void glrotatef (GLdouble angle, GLdouble x, Gldouble y, GLdouble z) parametry angle podawany w stopniach kąt obrotu w kierunku przeciwnym do ruchu wskazówek zegara x, y, z wektor kierunku od początku układu współrzędnych stosowany jako oś obrotu

Opis funkcji gluperspective Definicja macierz rzutowania perspektywicznego Składnia void gluperspective(gldouble fove, GLdouble aspect, Gldouble znear, GLdouble zfar) Parametry fovy kąt widzenia w kierunku pionowym podawany w stopniach aspect współczynnik kształtu. Stosowany jest do definiowania kąta widzenia w kierunku poziomym znear, zfar - odległość od bliskiej i dalekiej płaszczyzny ograniczającej. Obie wartości muszą być dodatnie

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/