Animowana grafika 3D
Transkrypt
Animowana grafika 3D
Grafika komputerowa Opracowanie: J. Kęsik [email protected] Transformacje 3D Podobnie jak w przestrzeni 2-wymiarowej, dla przestrzeni 3-wymiarowej definiujemy transformacje RST: • • • przesunięcie zmiana skali obrót wokół dowolnej osi współrzędnych Bardziej skomplikowane złożeniem podstawowych transformacje Animowana grafika 3D - J. Kęsik są Transformacje 3D Podobnie jak w 2D, do obliczeń transformacji wykorzystuje się wsp. Jednorodne ( x, y, z ) [ x ( x' , y ' , z ' ) [ x' y z 1] y ' z ' 1] Rzut w przestrzeni 4-ro wymiarowej… Animowana grafika 3D - J. Kęsik Transformacje 3D Transformacje są zapisywane za pomocą macierzy transformacji T , [ x' y ' z ' 1] [ x y z 1] M nie zyskuje ona 3 wymiaru w stosunku do jej odpowiednika w 2D. Jest powiększona do rozmiaru 4x4 Jest to bardzo istotne z punktu widzenia złożoności zarówno obliczeń wykonywanych przez komputer jak i kodu tworzonego przez programistę Animowana grafika 3D - J. Kęsik Macierz transformacji m11 m 21 M m31 m41 m12 m13 m22 m23 m32 m33 m42 m43 m14 m24 m34 m44 Przygotowanie transformacji polega na złożeniu transformacji elementarnych Animowana grafika 3D - J. Kęsik Macierz transformacji Przesunięcie 1 0 0 1 T (t x , t y , t z ) 0 0 t x t y 0 0 1 tz 0 0 0 1 Składa się z przesunięć wzdłuż poszczególnych osi Animowana grafika 3D - J. Kęsik Macierz transformacji Skalowanie sx 0 S (sx , s y , sz ) 0 0 0 sy 0 0 0 0 sz 0 0 0 0 1 Złożenie skalowania w stosunku poszczególnych osi. Uniknięcie zniekształcenia tylko wtedy gdy sx s y sz Animowana grafika 3D - J. Kęsik do Macierz transformacji Obrót (względem osi x) 0 1 0 cos Rx ( ) 0 sin 0 0 0 sin cos 0 0 0 0 1 Obrót zawsze względem jednej z osi. Obrót względem środka układu wsp. nieokreślony – brak płaszczyzny obrotu Animowana grafika 3D - J. Kęsik Macierz transformacji Obrót (względem osi y) cos 0 Ry ( ) sin 0 0 sin 1 0 0 cos 0 0 0 0 0 1 Animowana grafika 3D - J. Kęsik Macierz transformacji Obrót (względem osi z) cos sin Rz ( ) 0 0 sin cos 0 0 0 0 1 0 0 0 0 1 Animowana grafika 3D - J. Kęsik Macierz transformacji Transformacja złożona Złożenie transformacji wiąże się z nieco bardziej złożoną procedurą jak w przypadku 2D Wyznaczenie macierzy M przebiega kilku etapowo w zależności od złożoności przekształcenia Animowana grafika 3D - J. Kęsik Transformacja złożona - przykład Przykładowa transformacja polega na obrocie obiektu o kąt wokół osi wyznaczonej przez dwa punkty P2 P1 Animowana grafika 3D - J. Kęsik Transformacja złożona - przykład Krok 1 – wyznaczenie wektora obrotu Jest on zaczepiony w jednym z punktów i styczny do osi obrotu P2 P1 Animowana grafika 3D - J. Kęsik Transformacja złożona - przykład Krok 1 – wyznaczenie wektora obrotu x2 x1 u [a b c] v y2 y1 v z2 z1 v P2 v ( x2 x1 )2 ( y2 y1 )2 ( z2 z1 )2 Wektor u znormalizowany jest u P1 Animowana grafika 3D - J. Kęsik Transformacja złożona - przykład Krok 2 – przesunięcie osi obrotu do środka ukł. wsp. Przesunięcie początku wektora u z (x1, y1, z1) do (0, 0, 0): P2 u P1 Animowana grafika 3D - J. Kęsik Transformacja złożona - przykład Krok 2 – przesunięcie osi obrotu do środka ukł. wsp. 0 0 1 0 1 0 T ( x1 , y1 , z1 ) 0 0 1 x1 y1 z1 0 0 0 1 Animowana grafika 3D - J. Kęsik Transformacja złożona - przykład Krok 3 – Obrócenie osi i obiektu tak, aby oś stała się współliniowa z jedną z osi układu a) b) położenie osi na płaszczyźnie XZ obrót wokół osi Y Animowana grafika 3D - J. Kęsik Transformacja złożona - przykład Krok 3 a) położenie osi na płaszczyźnie XZ Położenie wektora u na płaszczyznę XZ jest równoznaczne z obrotem go o kąt α u u’ α uz Animowana grafika 3D - J. Kęsik Transformacja złożona - przykład Krok 3 a) położenie osi na płaszczyźnie XZ Wyznaczenie kąta α nie jest potrzebne bezpośrednio, należy wyznaczyć jego sin i cos (dla macierzy obrotu) u [a b c] u ' [0 b c ] u z [0 0 1] c b u u’ α uz a Animowana grafika 3D - J. Kęsik Transformacja złożona - przykład Krok 3 a) położenie osi na płaszczyźnie XZ Można je wyznaczyć z skalarnego i wektorowego: iloczynu c u 'u x u ' u x cos u 'u x 0 0 b 0 c 1 c u' b c d 2 2 ux 1 c cos d b u u’ α ux a Animowana grafika 3D - J. Kęsik Transformacja złożona - przykład Krok 3 a) położenie osi na płaszczyźnie XZ Można je wyznaczyć z skalarnego i wektorowego: iloczynu c u 'u x u X u ' u x sin u X d sin u X u 'u x det 0 0 uY b 0 uZ c u X b 1 b sin d b u u’ α ux a Animowana grafika 3D - J. Kęsik Transformacja złożona - przykład Krok 3 a) położenie osi na płaszczyźnie XZ Ostatecznie otrzymujemy macierz obrotu (rotacji) cos sin Rz ( ) 0 0 sin 0 cos 0 0 1 0 0 c 0 d 0 b 0 d 0 1 0 b d c d 0 0 0 0 0 0 1 0 0 1 Transformacja złożona - przykład Krok 3 b) obrót wokół osi Y Ponownie, wyznaczenie kąta β nie jest potrzebne bezpośrednio, należy wyznaczyć jego sin i cos (dla macierzy obrotu) u’ d β u” ux a Transformacja złożona - przykład Krok 3 b) obrót wokół osi Y Można je wyznaczyć z skalarnego i wektorowego: iloczynu u ' 'u x uY u ' ' u x sin uY sin u X u ' 'u x det a 0 uY 0 0 uZ d uY (a ) 1 sin a u’ d β u” ux a Transformacja złożona - przykład Krok 3 b) obrót wokół osi Y Można je wyznaczyć z skalarnego i wektorowego: iloczynu u' 'u z u' ' u z cos u' ' a 2 d 2 a ( b c ) 2 2 2 a 2 b2 c2 1 cos 1 uz 1 u’ d β u” ux a Transformacja złożona - przykład Krok 3 b) obrót wokół osi Y Ostatecznie macierz obrotu ma postać: cos 0 Ry ( ) sin 0 0 sin 1 0 0 cos 0 0 0 d 0 0 0 a 1 0 0 1 0 0 a 0 d 0 0 0 0 1 Transformacja złożona - przykład Krok 4 - obrót obiektu o kąt Θ względem osi X 0 0 0 1 0 cos sin 0 Rx () 0 sin cos 0 0 0 1 0 Transformacja złożona - przykład Krok 5 – transformacja odwrotna do kroku 3 1 1 M o1 R y ( ) Rz ( ) Transformacja złożona - przykład Krok 5 – transformacja odwrotna do kroku 2 M o 2 T 1 ( x1 , y1, , z1 ) Transformacja złożona - przykład Ostatecznie transformacja złożona iloczynem transformacji pośrednich będzie M T ( x1 , y1, , z1 ) Rz ( ) R y ( ) Rx () M o1 M o 2