Współrzędne jednorodne

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

Modelowanie i symulacja
KINEMATYKA Opis ruchu Układy współrzędnych
Programowanie obiektowe
Krzysztof Skabek, Przemysław Kowalski
Programowanie I Rekurencja.
Przekształcenia afiniczne
Logika Kategoryjna Michał R. Przybyłek.
Macierze Maria Guzik.
Dr hab. Ewa Popko pok. 231a
Wykład VI Atom wodoru i atomy wieloelektronowe. Operatory Operator : zbiór działań matematycznych przekształcających pewną funkcję wyjściową w inną funkcję
Podstawy rachunku macierzowego
Rzutowanie 3D  2D Rzutowanie planarne Rzut równoległe
Podstawy programowania PP – WYK5 Wojciech Pieprzyca.
Czytanie, pisanie i rysowanie – cd.. Jeszcze jeden strumyk PrintStream działa jak PrintWriter, ale: Używa domyślnego (systemowego) kodowania Nie wyrzuca.
Bryły geometryczne Konrad Wawrzyńczak kl. IIIa Bryły obrotowe
Programowanie grafiki 3D
MECHANIKA NIEBA WYKŁAD r.
Wprowadzenie do grafiki komputerowej
O relacjach i algorytmach
Biomechanika przepływów
Współrzędne jednorodne
Podstawy programowania
Teoria sterowania 2012/2013Sterowanie – użycie obserwatorów pełnych II Kazimierz Duzinkiewicz, dr hab. inż. Katedra Inżynierii Systemów Sterowania 1 Sterowanie.
Symulacje komputerowe
Symulacje komputerowe Detekcja kolizji brył sztywnych Fizyka w modelowaniu i symulacjach komputerowych Jacek Matulewski (
TABLICE C++.
Obserwatory zredukowane
Kinematyka prosta.
Dysk fizyczny i logiczny
Podstawy programowania w języku C i C++
Programowanie Windows na przykładzie C# część 1
Odwzorowywanie tekstur
Jerzy F. Kotowski1 Informatyka I Wykład 15 PIERWSZE KROKI.
Kwaterniony jako nośniki obrotu Piotr Orzechowski
MECHANIKA I WYTRZYMAŁOŚĆ MATERIAŁÓW
WPROWADZENIE DO KINEMATYKI MANIPULATORÓW ROBOTÓW
Przykładowy algorytm geometryczny (geometria płaska)
Algebra Przestrzenie liniowe.
Źródła błędów w obliczeniach numerycznych
Figury przestrzenne.
Przekształcenia liniowe
Zapis graficzny płaszczyzn
3dMatchGL Wykorzystanie biblioteki graficznej OpenGL przy tworzeniu gry 3DMatchGL.
Rozwiązywanie liniowych układów równań metodami iteracyjnymi.
Robust Image Retargeting via Axis-Aligned Deformation Mateusz Bujalski Daniele Panozzo Ofir Weber Olga Sorkine.
Zajęcia techniczne dla gimnazjum „Zastosowania programów do komputerowego wspomagania projektowania CAD” Innowacyjna technika Prezentacja dotyczy zasady.
METODA ELIMINACJI GAUSSA
METODA ELIMINACJI GAUSSA ASPEKTY NUMERYCZNE
Grafika i komunikacja człowieka z komputerem
Grafika i komunikacja człowieka z komputerem
Grafika i komunikacja człowieka z komputerem
1 Zagadnienia na egzamin. 2 Język C podsumowanie Struktura programu w języku C Zmienne, Stałe Operacje arytmetyczne Operatory logiczne Priorytety operatorów.
Trochę algebry liniowej.
WYKŁAD 8 FALE ELEKTROMAGNETYCZNE W OŚRODKU JEDNORODNYM I ANIZOTROPOWYM
Komputerowe wspomaganie projektowania Wydział Zarządzania i Ekonomii Politechnika Gdańska 2007 r.
Podsumowanie omówionych zagadnień
ALG - wykład 3. LICZBY ZESPOLONE MACIERZE. Powtórzenie z = a+bi, z  C Re z = Re(a+bi) = a Im z = Im(a+bi) = b.
Rozpoznawanie brył przestrzennych
Draver/GRK/cw3_result.jpg. Grafika 3D Wprowadzenie.
Grafika 2d - Podstawy. Kontakt Daniel Sadowski FTP: draver/GRK - wyklady.
PODSTAWY STEREOMETRII
PODSTAWY PRACY W PROGRAMIE AUTOCAD OPISYWANIE RYSUNKÓW: ‒style tekstu; ‒wprowadzanie tekstu tekst wielowierszowy tekst jednowierszowy ‒edycja tekstu. WYMIAROWANIE.
Rzutowania Rzutowanie jest przekształceniem przestrzeni trójwymiarowej na przestrzeń dwuwymiarową. Rzutowanie polega na poprowadzeniu prostej przez dany.
Opracowała: Iwona kowalik
Rzut sił na oś. Twierdzenie o sumie rzutów.
 jeden z dwóch podstawowych rodzajów grafiki komputerowej, w której obraz opisany jest za pomocą figur geometrycznych lub brył geometrycznych, umiejscowionych.
Symulacje komputerowe
Algebra WYKŁAD 4 ALGEBRA.
Podstawy teorii spinu ½
Zapis prezentacji:

Współrzędne jednorodne Wykład z grafiki komputerowej II (3D) Jacek Matulewski (e-mail: jacek@fizyka.umk.pl) http://www.fizyka.umk.pl/~jacek/dydaktyka/3d/ Grafika 3D Współrzędne jednorodne Wersja: 15 listopada 2007

Transformacje Podstawowe pojęcia grafiki 3D: Transformacje – określane we współrzędnych sceny 3D translacja (glTranslatef), obrót (glRotatef) skalowanie (glScalef), pochylenie złożenie – dowolna macierz 4x4 (glMultMatrixf) Transformacje muszą być ustalone przed narysowaniem wierzchołka, np..: glRotatef(45.0f, 0.0f, 1.0f, 0.0f); //kąt, kierunek osi glVertex3f(…);

Transformacje Współrzędne jednorodne (homogenous coordinates) Wprowadzone w 1946 przez E. Maxwella (rzutowanie) W 1965 L. Roberts użył ich do zunifikowania zapisu wszystkich transformacji: translacji, obrotów, skalowanie i pochylania Opis punktów n-wymiarowej przestrzeni za pomocą n+1 współrzędnych Obcinanie we współrzędnych jednorodnych może odbywać się w sześcianie zamiast w ściętym ostrosłupie (znacznie efektywniejsze numerycznie)

Transformacje We współrzędnych kartezjańskich (2D) obrót i translacja mogą być zapisane: We współrzędnych jednorodnych:

Macierze w C++ Należy pamiętać, że macierze w C++ zapisywane są kolumnami (M[nr kolumny+rozmiar*nr wiersza]) Oznacza to, że macierz możemy zadeklarować instrukcją float I[4][4]={{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, A, B}, {C, D, E, F}}; float I[16]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}; W OpenGL macierze 1D

Macierze w C++ Jeżeli chcemy ułatwić sobie życie, możemy zdefiniować funkcję wykonującą transpozycję:

Macierze w C++ float* Transpozycja(float* M,int rozmiar=4) { for(int kolumna=0;kolumna<rozmiar;++kolumna) for(int wiersz=kolumna+1;wiersz<rozmiar;++wiersz) float tmp=M[kolumna+rozmiar*wiersz]; M[kolumna+rozmiar*wiersz]=M[wiersz+rozmiar*kolumna]; M[wiersz+rozmiar*kolumna]=tmp; } return M;

Funkcja glMultMatrix Funkcja OpenGL glMultMatrixf wykonuje mnożenie bieżącej macierzy M (np. model-widok) przez macierz H podaną w argumencie tj. M → M·H (postmultiplication) Przykład użycia – mnożenie przez macierz jednostkową glMatrixMode(GL_MODELVIEW); glLoadIdentity(); float I[16]={1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1}; glMultMatrixf(Transpozycja(I)); W szablonie zmiany wprowadzać w funkcji TForm1::RysujScene przed rysowaniem figury

Funkcja glMultMatrix Efekt mnożenia przez macierz I: żadnych zmian

Skalowanie Macierz skalowania we współrzędnych jednorodnych glScalef(0.5,1,2); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); float S[16]={0.5,0,0,0, 0,1,0,0, 0,0,2,0, 0,0,0,1}; glMultMatrixf(Transpozycja(S));

Skalowanie Macierz skalowania jednorodnego we wszystkich kier. glMatrixMode(GL_MODELVIEW); glLoadIdentity(); float S[16]={1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,2}; glMultMatrixf(Transpozycja(S));

Odbicie Odbicie = „ujemne skalowanie” glMatrixMode(GL_MODELVIEW); glLoadIdentity(); float S[16]={-1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1}; glMultMatrixf(Transpozycja(S));

Obrót Macierz obrotu we współrzędnych jednorodnych rozkładana jest na obroty wokół osi (kąty Eulera): Obrót o kąt g wokół osi Z kąt a cos a sin a 0° 1 30° 0.8660 0.5 45° 0.7071 60° 90° Obrót wokół osi X Obrót wokół osi Y

Obrót Obrót wokół osi Z o kąt 45° glRotatef(45,0,0,1); float Rz[16]={0.7071,-0.7071,0,0, 0.7071, 0.7071,0,0, 0,0,1,0, 0,0,0,1}; glMultMatrixf(Transpozycja(Rz));

Obrót Obrót wokół osi X o kąt a: #include <math.h> float const a=20; float const ar=a*M_PI/180.0f; float Rx[16]= {1,0,0,0, 0,cos(ar),-sin(ar),0, 0,sin(ar),cos(ar),0, 0,0,0,1}; glMultMatrixf(Transpozycja(Rx)); const float a=20; glRotatef(a,1,0,0);

Pochylenie Macierz pochylenia (ang. skew) Elementy pozadiagonalne Nie ma odpowiednika w funkcjach OpenGL

Translacja Macierz translacji we współrzędnych jednorodnych glTranslatef(1.5,0.5,1); float T[16]={1,0,0,1.5, 0,1,0,0.5, 0,0,1,1, 0,0,0,1}; glMultMatrixf(Transpozycja(T));

Składanie transformacji Złożenie translacji w kier. X i obrotu wokół osi Z Złożenie translacji w kier. X i obrotu wokół osi Z

Obrót wokół wyznaczonego punktu Obrót o 45° w płaszczyźnie XY wokół punktu (2,0,0): Translacja o wektor [2,0,0] glRotatef(45,0,0,1); 2) Obrót wokół osi Z o 45° glTranslatef(-2,0,0); 3) Przesunięcie o wektor [-2,0,0] glTranslatef(2,0,0);

Obrót wokół wyznaczonego punktu Obrót o 45° w płaszczyźnie XY wokół punktu (2,0,0): Translacja o wektor [2,0,0] 2) Obrót wokół osi Z o 45° 3) Przesunięcie o wektor [-2,0,0]

Rzutowania Rzutowanie równoległe na płaszczyznę XY (glOrtho) Rzutowanie perspektywiczne (glFrustum)