Trasormace (2) Petr Felkel Katedra počítačové graiky a iterakce, ČVUT FEL místost KN:E-43 (Karlovo áměstí, budova E) E-mail: elkel@el.cvut.cz S použitím materiálů Bohuslava Hudce, Jaroslava Sloupa a Vlastimila Havraa Posledí změa: 3.5.26
Osova Opakováí trasormací z miula Trasormace (2) Projekce a viewport Homogeí souřadice Rotace podle Eulerových úhlů a Gimbal lock PGR 2
Logické kroky při trasormaci vrcholů 3D 2D = vrchol Modelovací a pohledová trasormace Modelovací Trasormace, Pohledová trasormace, Projekčí trasormace + Ořezáí (clippig) Perspektiví děleí Trasormace záběru (Viewport) modelovací souřadice = světové souřadice = souřadice kamery (oka) PGR ořezávácí souřadice Normalizovaé souřadice zařízeí = = = maticově Souřadice oka 3
Opakováí: Souřadicové soustavy v PG - daá, pozice objektů i kamery se deiuje vůči í = objekt ěkam umístěý do světa = druhý objekt umístěý jiam do světa, modelové matice matice přechodu z souřadicové soustavy světa do lokálí soustavy objektu (lokálí = globálí * ) Převádí lokálí souřadice modelu do globálích. = soustava kamery =pohledová matice = = = = PGR 4
Souřadice bodu objektu v růzých soustavách souřadic Souřadice bodu objektu v růzých souř. soustavách: y Rovost bází: = = = = x = = = Dvě souřadé soustavy, lišící se počátky a směry os Průměty bázových vektorů do bází PGR 5
Trasormace vzhledem k bázi. Trasormace maticí M vzhledem k bázi = = Trasormace vzhledem: k lokálí soustavě objektu ke světovým souřadicím k soustavě souřadic kamery PGR 6
Trasormace vzhledem k bázi / soustavě souřadic V soustavě : V soustavě : Zpět vůči :, = = = PGR 7
Aalogie s otoaparátem B. Beeš PGR 8
Vizualizace trasormací - zopakováí clip space ormalized space PGR 9
Projekčí trasormace 3D 2D vrchol x y z w modelovací souřadice Modelovací a pohledová trasormace modelovací Trasormace světové souřadice Pohledová trasormace souřadice kamery (oka) Projekčí trasormace + Ořezáí (clippig) M V P ořezávací souřadice Perspektiví děleí Normalizovaé souřadice zařízeí Trasormace záběru (Viewport) Souřadice oka PGR
Projekčí trasormace - P deiuje tvar pohledového objemu (viewig volume, rustrum) pohledový objem komolý jehla určuje, jak se objekt pomítá a průmětu (perspektiví či paralelí projekce) VS deiuje polohu ořezávacích rovi, tj., které objekty či jejich části budou ořízuty (clippig plaes) ixí část zadává se v souřadé soustavě kamery OpeGL umožňuje jakoukoliv projekci deiovaou uživatelem projekce obecě NENÍ aií trasormací (projekčí matice emá posledí řádek ve tvaru ) uté jsou ukce vytvářející matice pro ortograickou projekci (paralelí) perspektiví projekci PGR
Základ paralelího zobrazeí (ortho) viewer Projectio plae (, ) (y, ) = ear plae PGR 2
Základ perspektivího zobrazeí Projectio plae (, ) (y, ) viewer Similar triagles: PGR 3
Paralelí projekce mat4 glm::ortho( loat let, loat right, loat bottom, loat top, loat ear, loat ar); vytvoří matici pro paralelí promítáí pohledový objem je kvádr [let, bottom, *] a [right, top, *] = body a blízké a vzdáleé ořezávací roviě (* = ear a ar), jsou mapováy do dolího levého a pravého horího rohu ormátu (viewport) průměta PGR 4
Perspektiví projekce mat4 glm::rustum( loat let, loat right, loat bottom, loat top, loat ear, loat ar); vytvoří matici pro perspektiví promítáí pohledový objem je komolý jehla průměta podstavy rovoběžé, kolmé a vektor pohledu meší podstava = průměta objekty blíže zvětšeé (zaberou relativě větší část pohledového objemu) PGR 5
Perspektiví projekce mat4 glm::perspective ( loat ovy, loat aspect, loat ear, loat ar ); jiý způsob deiice parametrů pro perspektiví matici vytvoří matici pro symetrické perspektiví promítáí ovy = úhel záběru ve směru y, rozsah., spolu s ear určí h aspect je poměr šířky ku výšce pohledového objemu (w / h) w = aspect * h; hodoty ear a ar musí být kladé (ear >!!!) průměta PGR 6
Homogeí souřadice bod je reprezetová svými souřadicemi P = [x, y, z] t v poč. graice používáme homogeí souřadice P = [x, y, z, w] t Kartézské souřadice homogeí souřadice P = [x, y, z] t zvolit w P = [w.x, w.y, w.z, w] t příklad: bod v kartézských souřadicích [2, 3, 5] t. Jaké jsou jeho homogeí souřadice? [w.2, w.3, w.5, w] t aw apř. [2, 3, 5, ] t, [4, 6,, 2] t, atd. homogeí souřadice Kartézské souřadice P = [x, y, z, w] t P = [x/w, y/w, z/w] t w, wr příklad : bod v homogeích souřadicích [9, 3, 2, 3] t. Jaké jsou jeho kartézské souřadice? P = [9/3, 3/3, 2/3] t = [3,, 4] t Pro body volíme w = PGR 7
Homogeí souřadice ve 2D Geometrická iterpretace ve 2D: bodům s homogeími souřadicemi P = [w.x, w.y, w.z, w] t,w Tvoří přímku bez počátku, která je celá obrazem bodu P = [x, y, z] t x p x P Výhody homogeích souřadic Aií trasormace i projekce lze zapsat jedou maticí (ve 3D maticí 4x4) Pro body volíme w = Skládáí trasormací jako ásobeí matic Pro vektory je w = Kompaktí reprezetace bodů (w ) a vektorů (w = ) O k w [x p, y p,] t [kx p, ky p, k] t y p [w x p, w y p, w] t PGR 8 y
Matrices ad trasormatios h Liear trasormatio matrix Aie trasormatio matrix Perspective trasormatio matrix PGR 9
Trasormatios [Bitter APG] PGR 2
Odvozeí paralelí projekčí matice (Ortho) PGR l r l l r l r x x l r l x x x x l r l x 2 2 2 2 ) ( ) ( Pricip: Zachová x a y. Igoruje z Plus ormalizace souřadic: itervaly l, rt, b,, x y z l r l r x l r x 2 b t b t y b t y 2 z Hloubku ale potřebujeme a určeí viditelosti x x r l d z y y x x M ' ' ' d 2
Odvozeí paralelí projekčí matice (Ortho) PGR 22 Odvozeí hloubky z ear a ar se zapisují v ortho kladě (vzdáleost od oka), jsou ale a záporé ose z, proto ve vzorcích záporé z z z z z z z z 2 2 2 2 ) ( ) ( ) ( ) ( x y z z z l r l r x l r x 2 b t b t y b t y 2 z z 2 a, pokud : Platí, b t r l
Odvozeí paralelí projekčí matice (Ortho) Výsledá matice y z x 2 + 2 + 2 + x y z 2 r l x r l r l 2 t b yx t b t b 2 z Platí, pokud : l r, t b a PGR 23
Základ perspektivího zobrazeí Projectio plae (, ) (y, ) viewer Similar triagles: PGR 24
Odvozeí perspektiví projekčí matice (Frustum) Odvozeí X a Y Dosadíme = y = = z Plus ormalizace souřadic: x y r l 2 x r l r l t b 2 y t b t b Odvozeí dále: z x y 2 r l x r l z r l 2 t b y t b z t b 2 ( z).( z).( z) ( z) w z zx z y zz 2 r l x z r l r l 2 t b y z t b t b 2 PGR 26 z
Odvozeí perspektiví projekčí matice (Frustum) Mapováí hloubky Iterpoluje se /z Proto ve tvaru z z A B z Plus ormalizace souřadice z Dosadíme - -, - A A B a B - - A 2 B 2 ( z) z y Odvozeí A a B a dalším slajdu.( z) zz z 2 PGR 27
Odvozeí perspektiví projekčí matice (Frustum) PGR 28 B - A a / B - A Odvozeí A a B: Dosadíme - -, - A A -A A ---- ---------- B - A - B A 2 2 B B B A A B 2 2 2 2 B z A z
Odvozeí perspektiví projekčí matice (Frustum) Výsledá matice y Platí pokud : l r, t b a z x 2 + 2 + + 2 zx z y zz w z 2 r l x z r l r l 2 t b y z t b t b 2 PGR 29 z
Perspektiví děleí /w 3D 2D vrchol x y z w modelovací souřadice Modelovací a pohledová trasormace modelovací Trasormace světové souřadice Pohledová trasormace souřadice kamery (oka) Projekčí trasormace + Ořezáí (clippig) ořezové souřadice Perspektiví děleí Normalizovaé souřadice zařízeí Trasormace záběru (Viewport) Souřadice oka PGR 3
Divisio by w Matrix multiplicatio (rom eye to clip coordiates) = 2 + 2 + + 2 Divisio by (rom clip to ormalized coordiates) = divisio by = / / / PGR 3
Trasormace záběru 3D 2D vrchol x y z w modelovací souřadice Modelovací a pohledová trasormace modelovací Trasormace světové souřadice Pohledová trasormace souřadice kamery (oka) Projekčí trasormace + Ořezáí (clippig) ořezové souřadice Perspektiví děleí Normalizovaé souřadice zařízeí Trasormace záběru (Viewport) Souřadice oka PGR 32
Trasormace pracoviště (Viewport) Formát (viewport) = obdélíková oblast oka, do které se mapuje průměta (= promítací rovia) void glviewport( GLit x, GLit y, GLsizei width, GLsizei height); [x, y] je levý dolí roh ormátu (viewport), width a height je šířka a výška ormátu v souřadicích oka v pixelech pro kihovu GLUT se astavuje v callback ukci reshape poměr stra ormátu by měl být stejý jako poměr stra průměty jiak zkresleí obrazu GLUT: implicitě a celé oko (,,w, h) PGR 33
Trasormace pracoviště (Viewport) Normalizovaé souřadice zařízeí Souřadice a obrazovce - - - x y w Viewport scree h = 2 + =+ 2 = h 2 + = 2 + + 2 =+ h 2 z w a viditelost (Z-buer) PGR 34
Trasormace pracoviště (maticově) Normalizovaé souřadice zařízeí - - - 2 + 2 h 2 + h 2 + 2 2 Souřadice a obrazovce x y w Viewport =+ 2 =+ h 2 scree PGR 35 h z w a viditelost (Z-buer)
Trasormace pracoviště (Viewport) Dotaz a aktuálí ormát (trasormaci pracoviště) it ormat[4]; glgetitegerv( GL_VIEWPORT, ormat); Výzam: x, y, w, h x = ormat[], y = ormat[], w = ormat[2], h = ormat[3], PGR 36
Zachováí poměru stra obrazu aby zůstala kružice kulatá v proceduře reshape(it w, it h) registrováa jako Callback glutreshapefuc(reshape); Dva způsoby a) zmešeím ormátu b) protažeím projekce PGR 37
Zachováí poměru stra obrazu a) zmešeím ormátu - zbude evyužitá plocha oka i( w > h ) // oko široké glviewport((w-h)/2,, h, h); else // oko vysoké glviewport(, (h-w)/2, w, w); zkresleé ezkresleé zkresleé ezkresleé Nevyužitá plocha glviewport(,, w, h); x, y, w, h glviewport((w-h)/2,, h, h); w > h Nevyužitá plocha PGR w <= h 38
Zachováí poměru stra obrazu b) protažeím projekce (zvětší se pohledový objem) GLloat aspect = (GLloat) w / (GLloat) h; i( aspect >. ) // w > h => oko široké m = glm::ortho(-.5*aspect,.5*aspect, -.5,.5, -, ); else // let, right, bottom, top, ear, ar m = glm::ortho(-.5,.5, -.5/aspect,.5/aspect, -, ); glm::rustum(-.5,.5, -.5/aspect,.5/aspect,., ); Obdobě: glm::perspective(6., aspect,., ); zkresleé ezkresleé w > h => oko široké PGRlet*aspect right*aspect 39
Aspect aspect = w / h glm::perspective(6., aspect,., ); aspect = 2.7 aspect =.5 PGR 4
Rotace podle Eulerových úhlů a Gimbal lock PGR 4
Rotace dle Eulerových úhlů Eulerovy úhly = pitch-yaw-roll (výška, kurs, rotace) komplexí otočeí rozdělíme a otočeí dle os X, Y, Z X Y Z cos() -si() si() cos() cos() si() -si() cos() cos() -si() si() cos() Rotate(,,, ) Rotate(,,, ) Rotate(,,, ) PGR 42
Základí orietace Pitch-Yaw-Roll [NASA] PGR 43
Základí orietace Pitch-Yaw-Roll Pitch Yaw Roll Výškovky Kormidlo Křidélka [NASA] PGR 44
Gimbal [ džimbl] otočá podpěra -Tři gimbals spojeé dohromady + závaží či setrvačík -Původí použití u gyroskopů a upevěí kompasů, kame a skleic a lodích od atiky. [Wikipedia] PGR 45
Rotace a Gimbal lock [ džimbl lok] Eulerovy úhly = pitch-yaw-roll (výška, kurs, rotace) komplexí otočeí rozdělíme a otočeí podle os X, Y, Z dělá se postupě => otočeím druhé osy v hierarchii o 9 splyou osy a dojde ke ztrátě jedoho stupě volosti (gimbal lock) y y y x x 2 3 x z z z Pořadí rotací v programu: Rotate(a,,, ) // X 3 Rotate(9,,, ) // Y 2 Rotate(c,,, ) // Z Z splye s X Rotace kolem X s modelem otočeým o 9 dle Y dělá totéž, co rotace kolem Z PGR 46
Ztráta jedoho stupě Gimbal Lock [Wikipedia] [http://www.ho-emde.de/~homa/gimbal9822.pd] PGR 47
Vysvětleí PGR 48
Vysvětleí Compositio[rax, r9y, rbz] = rax * r9y * rbz = Otočeím o 9º okolo osy Y (prostředí při skládáí trasormací) se ztratí možost otáčeí okolo osy X (osa X splye s osou Z). Místo toho se otáčí okolo osy Z původího modelu. Výsledý úhel otočeí vzike jako součet požadovaých úhlů otočeí kolem X a Z PGR 49
Jak ezpůsobit gimbal lock Rotaci podle obecé osy (místo skládáí rotací podle Eulerových úhlů) Používat kvaterioy (quaterios) PGR 5