Struktura scény Transformace (2)



Podobné dokumenty
Transformace (2) Petr Felkel Katedra počítačové grafiky a interakce, ČVUT FEL místnost KN:E-413 (Karlovo náměstí, budova E)

Struktura scény. Petr Felkel Katedra počítačové grafiky a interakce, ČVUT FEL místnost KN:E-413 (Karlovo náměstí, budova E)

MATEMATIKA PŘÍKLADY K PŘÍJÍMACÍM ZKOUŠKÁM BAKALÁŘSKÉ STUDIUM MGR. RADMILA STOKLASOVÁ, PH.D.

4.5.9 Vznik střídavého proudu

UNIVERZITA PALACKÉHO V OLOMOUCI PŘÍRODOVĚDECKÁ FAKULTA

Hierarchický model Josef Pelikán CGG MFF UK Praha. 1 / 16

10. Analytická geometrie kuželoseček 1 bod

Číslicové filtry. Použití : Analogové x číslicové filtry : Analogové. Číslicové: Separace signálů Restaurace signálů

Vstupní operace, identifikace a výběr zobrazovaných objektů, virtuální trackball

ZÁKLADNÍ POJMY OPTIKY

Euklidovský prostor Stručnější verze

Matematika 1. Katedra matematiky, Fakulta stavební ČVUT v Praze. středa 10-11:40 posluchárna D / 13. Posloupnosti

Přímá úměrnost

1. K o m b i n a t o r i k a

Transformace (v OpenGL) příklady a knihovna GLM

1. Nakreslete všechny kostry následujících grafů: nemá žádnou kostru, roven. roven n,

DYNAMIC PROPERTIES OF ELECTRONIC GYROSCOPES FOR INERTIAL MEASUREMENT UNITS

6.2.1 Zobrazení komplexních čísel v Gaussově rovině

Připravil: David Procházka. Projekce

ÚLOHA ČÍNSKÉHO LISTONOŠE, MATEMATICKÉ MODELY PRO ORIENTOVANÝ A NEORIENTOVANÝ GRAF

Matematika I. Název studijního programu. RNDr. Jaroslav Krieg České Budějovice

1.1 Napište středovou rovnici kružnice, která má střed v počátku soustavy souřadnic a prochází bodem

17. Statistické hypotézy parametrické testy

Modelování ve výpočtových software

Interakce světla s prostředím

BRICSCAD V13 X-Modelování

Pracovní listy PRAVOÚHLÁ AXONOMETRIE

Matice. nazýváme m.n reálných čísel a. , sestavených do m řádků a n sloupců ve tvaru... a1

7. Analytická geometrie

Úvod do zpracování měření

Úvod Typy promítání Matematický popis promítání Implementace promítání Literatura. Promítání. Pavel Strachota. FJFI ČVUT v Praze

u, v, w nazýváme číslo u.( v w). Chyba! Chybné propojení.,

20. Eukleidovský prostor

4. Model M1 syntetická geometrie

Matematika NÁRODNÍ SROVNÁVACÍ ZKOUŠKY BŘEZNA 2018

Průniky rotačních ploch

1. Číselné obory, dělitelnost, výrazy

Multimediální systémy. 11 3d grafika

Mechanika

ZÁPISKY Z ANALYTICKÉ GEOMETRIE 1 SOUŘADNICE, BODY

Daniel Honc, František Dušek Katedra řízení procesů a výpočetní techniky, FCHT, Univerzita Pardubice

Autodesk Inventor 8 vysunutí

DIFERENCIÁLNÍ POČET FUNKCE JEDNÉ PROMĚNNÉ. 1) Pojem funkce, graf funkce

základním prvkem teorie křivek v počítačové grafice křivky polynomiální n

ij m, velikosti n je tvořen (n m) rozměr-ným polem dat x x x 22 x n1 ... x n2 7.1 Druhy korelačních koeficientů

Tematický plán pro školní rok 2015/16 Předmět: Matematika Vyučující: Mgr. Iveta Jedličková Týdenní dotace hodin: 5 hodin Ročník: pátý

MAGNETICKÉ A ZEMĚPISNÉ PÓLY ZEMĚ

Zobrazení v rovině je předpis, který každému bodu X roviny připisuje právě jeden bod X roviny. Bod X se nazývá vzor, bod X se nazývá obraz.

1.2. NORMA A SKALÁRNÍ SOUČIN


Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Jana Kalinová [ÚLOHA 01 ÚVOD DO PROSTŘEDÍ OBJEMOVÁ SOUČÁST; PŘÍKAZ SKICA A JEJÍ VAZBENÍ]

Perspektiva jako matematický model objektivu

Odhad parametru p binomického rozdělení a test hypotézy o tomto parametru. Test hypotézy o parametru p binomického rozdělení

f(x) = 9x3 5 x 2. f(x) = xe x2 f(x) = ln(x2 ) f(x) =

OKRUŽNÍ A ROZVOZNÍ ÚLOHY: OBCHODNÍ CESTUJÍCÍ. FORMULACE PŘI RESPEKTOVÁNÍ ČASOVÝCH OKEN

Hardware pro počítačovou grafiku NPGR019

Entrance test from mathematics for PhD (with answers)

IAJCE Přednáška č. 12

Čistý přínos pro průmysl

Cvičení 3 z předmětu CAD I PARAMETRICKÉ 3D MODELOVÁNÍ

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

FAKULTA STAVEBNÍ VUT V BRNĚ PŘIJÍMACÍ ŘÍZENÍ PRO AKADEMICKÝ ROK

Rozhodovací stromy. Úloha klasifikace objektů do tříd. Top down induction of decision trees (TDIDT) - metoda divide and conquer (rozděl a panuj)

12. N á h o d n ý v ý b ě r

Vyučovací předmět / ročník: Matematika / 5. Učivo

OBRAZOVÁ ANALÝZA POVRCHU POTISKOVANÝCH MATERIÁLŮ A POTIŠTĚNÝCH PLOCH

Šroubovice a šroubové plochy

Základní ovládání a práce s programem Rhinoceros 3D

Mária Sadloňová. Fajn MATIKA. 150 řešených příkladů (vzorek)

7. ODE a SIMULINK. Nejprve velmi jednoduchý příklad s numerických řešením. Řešme rovnici

Matematika přehled vzorců pro maturanty (zpracoval T. Jánský) Úpravy výrazů. Binomická věta

Řešení : Těleso T je elementárním oborem integrace vzhledem k rovině (x,y) a proto lze přímo aplikovat Fubiniovu větu pro trojný integrál.

I. TAYLORŮV POLYNOM. Taylorovy řady některých funkcí: Pro x R platí: sin(x) =

Těžiště a moment setrvačnosti Nalezení práce polohy těžiště a momentu setrvačnosti vůči zadané ose u homogenních těles v třírozměrném prostoru.

REPREZENTACE 3D SCÉNY

Název školy. Moravské gymnázium Brno s.r.o. Mgr. Marie Chadimová Mgr. Věra Jeřábková. Autor. Matematika. Planimetrie. Trojúhelníky. Teorie a příklady.

Matematika 1 MA1. 1 Analytická geometrie v prostoru - základní pojmy. 4 Vzdálenosti. 12. přednáška ( ) Matematika 1 1 / 32

Předmět: SM 01 ROVINNÉ PŘÍHRADOVÉ KONSTRUKCE

(3) Zvolíme pevné z a sledujme dráhu, kterou opisuje s postupujícím časem koncový bod vektoru E v rovině z = konst. Upravíme vztahy (2) a (3)

Stromy, haldy, prioritní fronty

Seznámíte se s pojmem Riemannova integrálu funkce jedné proměnné a geometrickým významem tohoto integrálu.

Příklad 1.3: Mocnina matice

Obrázky. Tag Význam Párový Výskyt. img obrázek ne. img video ne. map klikací mapa. area oblast v klikací mapě ne

Matematika 1. Ivana Pultarová Katedra matematiky, Fakulta stavební ČVUT v Praze. středa 10-11:40 posluchárna D Posloupnosti

Kótování na strojnických výkresech 1.část

PROHLEDÁVÁNÍ GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Animované modely šroubových ploch

Slouží pro výběr prvků, skupin a komponent pro další použití

2.1 Pokyny k otevřeným úlohám. 2.2 Pokyny k uzavřeným úlohám TESTOVÝ SEŠIT NEOTVÍREJTE, POČKEJTE NA POKYN!

Zimní semestr akademického roku 2014/ prosince 2014

ŠROUBOVICE. 1) Šroubový pohyb. 2) Základní pojmy a konstrukce

ANALYTICKÁ GEOMETRIE HYPERBOLY

Průchod paprsků různými optickými prostředími

5. VZORKY. Obsah. 5.1 Vzorky 5. VZORKY 52

IV-1 Energie soustavy bodových nábojů... 2 IV-2 Energie elektrického pole pro náboj rozmístěný obecně na povrchu a uvnitř objemu tělesa...

1 Tyto materiály byly vytvořeny za pomoci grantu FRVŠ číslo 1145/2004.

8. Stereometrie 1 bod

Počítačové vidění vs. digitální zpracování obrazu Digitální obraz a jeho vlastnosti

Zobrazení čísel v počítači

Západočeská univerzita v Plzni. Fakulta aplikovaných věd Katedra matematiky. Geometrie pro FST 1. Pomocný učební text

Transkript:

Struktura scéy Trasormace () Petr Felkel Katedra počítačové graiky a iterakce, ČVUT FEL místost KN:E-413 (Karlovo áměstí, budova E) E-mail: elkel@el.cvut.c S použitím materiálů Bohuslava Hudce, Jaroslava Sloupa a Vlastimila Havraa Posledí měa: 16..15

Osova Struktura scéy Modelováí a repreetace scéy Lieárí (ehierarchická) repreetace Hierarchická repreetace Vlastí gra scéy příprava pro cvičeí Trasormace () Homogeí souřadice Projekce a viewport Rotace podle Eulerových úhlů a Gimbal lock Virtuálí trackball PGR

Struktura scéy PGR 3

Modelováí modely = abstrakce virtuálích světů, které vytváříme svými programy v počítačové graice modelujeme pomocí geometrických objektů většia API poskytuje aprosté miimum geometrických primitiv, složitější objekty ich musí vytvořit uživatel (OpeGL poue trojúhelík, čára a bod) Složeé objekty v modelech a vaby mei imi musíme ějak repreetovat SAMI Objekty se typicky ačtou exterích souborů pomocí kihove, apříklad kihova ASSIMP: http://assimp.sourceorge.et/ Příklad použití: http://www.lighthouse3d.com/cg-topics/code-samples/importig-3d-models-with-assimp/ (Po. Kihov a je pomalá v debug režimu a widows) PGR 4

Modelováí geometrický objekt (dům) le rodělit a eávislé segmety (detaily) apř. oko, komí,... Nabíí se 3 působy repreetace: 1. Posloupostí segmetů (lieárí datová struktura). Hierarchický model aiví strom 3. Hierarchický model orietovaý acyklický gra PGR 5

1. Lieárí (ehierarchická) repreetace objekt je repreetová posloupostí segmetů (lieárí datová struktura) segmet obsahuje deiici graických elemetů a jejich atributů i trasormací (př. levé oko v příemí) dům střecha TAG komí TAG stěy příemí TAG stěy prvího patra TAG 1. oko 4. oko TAG TAG eexistuje iormace o vájemých vabách objektů => sado se maipuluje se segmety, => ale těžko s komplexími strukturami (celé patro) PGR 6

1. Lieárí (ehierarchická) repreetace Kdy použít lieárí strukturu v programu? Poue pro jedoduché objekty void house(void) { /* model celého domu */ roo(); /* střeší segmet */ chimey(); groudfloorwalls(); irstfloorwalls(); irstwidow(); ourthwidow(); } PGR 7

. a 3. Hierarchická repreetace Vtahy mei objekty modelu repreetujeme graem, kterému říkáme GRAF SCÉNY ( scee graph ) Gra scéy eí kostruktem OpeGL, strukturu scéy si v programu vytváříme sami. V grau uložea (v ávorce uvedeo ve které části grau) Geometrie G (listy), trasormace T atributy A (vitří uly, hray, listy) odkay a součásti (hray) Vykresleí objektu = systematické procháeí (traverováí) grau do hloubky či do šířky v programu volit jede působ traverováí a eměit ho atributy se dědí, ebo jsou v ulu předeiováy PGR 8

. Hierarchický model aiví strom Jedoduchý gra je kořeový strom (orietovaý gra be uavřeých cest a smyček, každý uel kromě kořee má předchůdce-rodiče) Vitří uly repreetují adřaeé segmety (detaily) Listy repreetují graická primitiva opakují se TA dům Příemí Prví patro střecha TA 1. oko. oko stěy 3. oko 4. oko stěy komí TA G G G listy = graická primitiva (+ atributy) PGR 9

. Hierarchický model aiví strom Jak akódovat strom v programu? vitří uly ukládají trasormace, atributy a odkay a ásledíky listy repreetováy kreslícími ukcemi (geometrie) Př. Napevo v programu: void house(void) { /* model celého domu */ // (posuutí do počátku) groudfloor(); // včetě trasormace pro příemí irstfloor(); // včetě trasormace pro 1. patro roo(); // včetě trasormace pro střechu } Problémy repreetace s použitím stromu: opakuje se geometrie (listy) i stejé tvary (detaily) v růých polohách (vitří uly) trasormace kódováy apevo v ulech obtížá maipulace (jede celek (uel) ejle použít vícekrát a růých místech) PGR 1

3. Orietovaý acyklický gra (DAG) Též Collapsed tree (VRML) Opakující se detaily se uloží je jedou - (př. jeda deiice komíu) Vitří uly repreetují detaily daé úrově modelu, optimálě vpočátku [,,] (ale eopakují se) Hray repreetují vaby (relace rodič-potomek) esou trasormace, atributy (ikremetálí měu a cestě od rodiče k potomkovi) Listy repreetují graická primitiva (ale eopakují se) příemí dům TA patro Prví patro TA střecha TA stěy levé oko oko Pravé oko krytia komí G G PGR 11

3. Orietovaý acyklický gra (DAG) Jak akódovat DAG v programu? Vitří uly ukládají odkay a potomky v ákladí poloe případě ormaliačí trasormaci poor a ormály, vi. další lekce Hray trasormace, atributy Listy repreetováy kreslícími ukcemi Př. : void house(void) { /* model celého domu */ /* astav trasormace pro příemí */ loor(); // v ákladí poloe /* astav trasormace pro prví patro*/ loor(); ; /* astav trasormace pro střechu */ roo(); } PGR 1

Repreetace grau specialiovaou kihovou graem v paměti (OpeSceeGraph, OpeSG, OpeVRML, dcgisceegraph) pro gra scéy vláští třída a ukce při vykresleí se traveruje strom (trasormují, volají kreslící procedury) skrytě pomocí vlastí datové struktury repreetující gra scéy pořadím voláí vykreslovacích procedur může být méě obecá a proto rychlejší PGR 13

Hierarchická repreetace - shrutí Výhody hierarchického modelováí (DAG) hierarchické modely odrážejí strukturu objektů dobře se vytvářejí (top-dow ebo bottom-up) dobře se editují a aimují, dobře se maipuluje s podstrukturami (trasormace jsou součástí hra) paměťově úsporá repreetace modelu (be redudace) PGR 14

Atributy v graech scéy POZOR a atributy při traverováí grau scéy atributy jsou stavové proměé proto ůstávají astaveé, dokud je eastavíme jiak to platí pro ěkteré implemetace výsledek pak může áviset a pořadí traverace v ašich příkladech to eplatí a pořadí traverace eáleží pro aimaci grau (dyamické astavováí trasormací) se používá ěkolik postupů probereme jede možých působů, použitý pro áš gra scéy PGR 15

Vlastí gra scéy Jedoduchý gra scéy pro účely předmětu PGR, vi cvičeí. root trasorm EllipsAim RotatAim trasorm trasorm trasorm jeep cessa mig terrai istace třídy MeshNode (soubor data/jeep/jeep.obj ) istace třídy MeshNode istace třídy MeshNode (soubor data/terrai ) PGR 16

Vlastí gra scéy Typy ulů SceeNode báový typ obsahuje vektor odkaů a potomky TrasormNode ukládá trasormačí matici vitří uel grau RotatioAimNode rotace kolem osy pro aimaci vitří uel grau ukládá vykreslitelou geometrii terrai list grau TerraiNode teré vygeerovaý programem terrage MeshNode OBJNode objekt ve ormátu.obj Metody update / pro aimace addchildnode/deletechildnode - správa hierarchie scee trasorm RotatAim OBJ PGR 17

Vlastí gra scéy - dcgisceegraph Ručí sestaveí grau scéy 1 S void iit() { root_ode = ew SceeNode( "root" ); T Terrai // terrai trasorm ode CTrasormNode* trasorm_p = ew CTrasormNode( root_ode ); // terrai ode CTerraiNode *terrai_p = ew CTerraiNode( trasorm_p ); terrai_p->load("terrai"); PGR 18

Vlastí gra scéy - dcgisceegraph Ručí sestaveí grau scéy T A...... Terrai OBJ // Model bude rotovat kolem osy procháející počátkem souřadic RotatioAimNode * prot = ew RotatioAimNode("py-rot", root_ode); prot->setaxis(vec3(1,, )); prot->setspeed(m_pi / 1); S // Nyí ahraj model ormátu OBJ a učiň ho potomkem ulu s deiicí // aimovaé rotace, rodič je správě astave MeshNode *mesh = ew MeshNode( cessa.obj, prot); mesh->loadmesh(); // load the data PGR 19

Vlastí gra scéy - dcgisceegraph Vykresleí grau scéy void uctiodraw(void) { // vymaž obraovku glclearcolor(.3,.3,.3, 1.); glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); // astaveí matice projekce = perspektivy glm::mat4 projectio = Matrix4::Perspective(M_PI / 4, aspect_ratio,.1, 1); // astaveí modelovací a pohledovou matici Matrix4 view = Matrix4::Idetity(); Matrix4 model= SedMatricesToShaders(projectio, view, model) // vykresli celou scéu = traveruj gra scéy rootnode_p->draw(); }... glutswapbuers(); PGR

Vlastí gra scéy - dcgisceegraph Jedoduchá aktualiace trasormace pomocí časovače void FucTimerCallback(it) { double timed =.1 * (double)glutget(glut_elapsed_time); // v milisecudách // aimuj scéu pro adaý čas i (root_ode) root_ode->update(timed); } // astav další voláí časovače pro příště gluttimerfuc(33, FucTimerCallback, ); // vyvolej překresleí obrau glutpostredisplay(); PGR 1

Vlastí gra scéy - dcgisceegraph Příklad: ikremetálí rotace, vi třída RotatioAimNode{ TrasormNode * ptras = ew TrasormNode("py-tras", root_ode); ptras->traslate(vec3(.5,, -3)); ptras->scale(vec3(.5,.5,.5)); RotatioAimNode * prot = ew RotatioAimNode( "py-rot", ptras); prot->setaxis(vec3(1,, )); prot->setspeed(m_pi / 1); // v radiáech a sekudu MeshNode * mesh1 = ew MeshNode("data/cessa.obj",prot); mesh1->loadmesh(); PGR

Skládáí trasormací v grau scéy Trasormace se při postupu shora dolů skládají leva doprava a) Vyhodocují se během vykreslováí výhodé použít ásobík: dolů push / ahoru pop b) Vyhodotí se v samostatém průchodu update() složeé trasormace se uloží v hraách (takto je to v dcgisceegraphu) PGR 3

Homogeí souřadice bod je repreetová svými souřadicemi P = [x, y, ] t v poč. graice používáme homogeí souřadice P = [x, y,, w] t Kartéské souřadice homogeí souřadice P = [x, y, ] t volit w P = [w.x, w.y, w., w] t příklad: bod v kartéských souřadicích [, 3, 5] t. Jaké jsou jeho homogeí souřadice? [w., w.3, w.5, w] t aw apř. [, 3, 5, 1] t, [4, 6, 1, ] t, atd. homogeí souřadice Kartéské souřadice P = [x, y,, w] t P = [x/w, y/w, /w] t w, wr příklad : bod v homogeích souřadicích [9, 3, 1, 3] t. Jaké jsou jeho kartéské souřadice? P = [9/3, 3/3, 1/3] t = [3, 1, 4] t Pro body volíme w = 1 PGR 4

Homogeí souřadice ve D Geometrická iterpretace ve D: bodům s homogeími souřadicemi P = [w.x, w.y, w., w] t,w Tvoří přímku be počátku, která je celá obraem bodu P = [x, y, ] t x p x P Výhody homogeích souřadic Aií trasormace i projekce le apsat jedou maticí (ve 3D maticí 4x4) Skládáí trasormací jako ásobeí matic Pro vektory je w = Kompaktí repreetace bodů (w ) a vektorů (w = ) O k 1 w [x p, y p,1] t [kx p, ky p, k] t y p [w x p, w y p, w] t PGR 5 y

Trasormace () PGR 6

Aalogie s otoaparátem B. Beeš PGR 7

Viualiace trasormací - opakováí PGR 8

PGR Projekčí trasormace w y x Souřadice oka Modelovací a pohledová trasormace modelovací Trasormace Pohledová trasormace Projekčí trasormace + Ořeáí (clippig) Trasormace áběru (Viewport) modelovací souřadice světové souřadice souřadice kamery (oka) Normaliovaé souřadice aříeí vrchol Perspektiví děleí ořeávací souřadice 3D D 9

Projekčí trasormace 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) deiuje polohu ořeávacích rovi, tj., které objekty či jejich části budou oříuty (clippig plaes) adává se v souřadicích kamery OpeGL umožňuje jakoukoliv projekci deiovaou uživatelem projekce NENÍ aií trasormací (projekčí matice emá posledí řádek ve tvaru 1) uté jsou ukce vytvářející matice pro ortograickou projekci (paralelí) perspektiví projekci 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íké a vdáleé ořeá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 31

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 většeé (aberou relativě větší část pohledového objemu) PGR 3

Perspektiví projekce mat4 glm::perspective ( loat ovy, loat aspect, loat ear, loat ar ); jiý působ deiice parametrů pro perspektiví matici vytvoří matici pro symetrické perspektiví promítáí ovy = úhel áběru v roviě x-, rosah., 18. 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 33

Základ perspektivího obraeí PGR 34

Odvoeí 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 1 1 1) ( 1 1) ( Pricip: Zachová x a y. Igoruje Plus ormaliace souřadic: itervaly l, rt, b, 1, 1 x y l r l r x l r x b t b t y b t y 1 Hloubku ale potřebujeme a určeí viditelosti x x r l 1 1 d y y x x M ' ' ' d 1 1 35

Odvoeí paralelí projekčí matice (Ortho) PGR 36 Odvoeí hloubky ear a ar se apisují v ortho kladě (vdáleost od oka), jsou ale a áporé ose, proto ve vorcích áporé 1 1) ( 1 1) ( ) ( ) ( x y 1 1 l r l r x l r x b t b t y b t y a, pokud : Platí, b t r l

Odvoeí paralelí projekčí matice (Ortho) PGR 37 Výsledá matice 1 b t b t b t l r l r l r R x y l r l r x l r x b t b t x b t y 1 1 b t b t l r l r R a, pokud : Platí, b t r l b t b t y b t y

Odvoeí perspektiví projekčí matice (Frustum) Zmešuje x a y dle (promítá je a stíítko) x P = [x, y, ] P = [x,y,] x' d x' x d, x, y' d y' y d 1, ' x', y', ',1 T. x, y,, d T y, 1 1 1 d d ' d x 1 y =d stíítko Po trasormaci homogeích do kartéských souřadic (po děleí w = / d ) dostáváe P x. d /, y. d /, d T PGR 38

Odvoeí perspektiví projekčí matice (Frustum) Odvoeí X a Y Dosadíme d = - - - x' x, y' y Plus ormaliace souřadic: y x y r l x r l r l t b y t b t b Odvoeí dále: x y 1 r l x r l r l 1 t b y t b t b 1 ( ).( ).( ) ( ) w x y r l x r l r l t b y t b t b PGR 39

Odvoeí perspektiví projekčí matice (Frustum) Mapováí hloubky Iterpoluje se 1/ Proto ve tvaru A B Plus ormaliace souřadice Dosadíme - -1, - 1 A A 1 B a 1 B - - A B 1 ( ) y Odvoeí A a B a dalším slajdu.( ) PGR 4

Odvoeí perspektiví projekčí matice (Frustum) PGR 41 B - A 1 a 1 / B - A 1 Odvoeí A a B: Dosadíme - -1, - 1 A A -A A ---- ---------- B - A - B A 1 1 B B B A A B 1 1 1 B A

Odvoeí perspektiví projekčí matice (Frustum) PGR 4 Výsledá matice 1 b t b t b t l r l r l r R b t b t l r l r R 1 1 a, pokud : Platí b t r l x y l r l r x l r x b t b t y b t y w

Trasormace áběru 3D D vrchol x y w modelovací souřadice Modelovací a pohledová trasormace modelovací Trasormace světové souřadice Pohledová trasormace souřadice kamery (oka) Projekčí trasormace + Ořeáí (clippig) ořeové souřadice Perspektiví děleí Normaliovaé souřadice aříeí Trasormace áběru (Viewport) Souřadice oka PGR 43

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, GLsiei width, GLsiei 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 kresleí obrau GLUT: implicitě a celé oko (,,w, h) PGR 44

Trasormace pracoviště (Viewport) Normaliovaé souřadice aříeí [x d y d d ] t 1 1 Souřadice ormátu a obraovce [x w y w w ] t scree w -1-1 1 x w = (w / ) x d + o x -1 y w = (h / ) y d + o y w = [(-) / ] d + (+) / w a viditelost (Z-buer) o y x y viewport o x = x + w/ o y = y + h/ gldepthrage(, ) astaveí rosahu hloubek, clamp(,) blíká rovia. vdáleá rovia 1. h PGR 45

Trasormace pracoviště (Viewport) Dota a aktuálí ormát (trasormaci pracoviště) it ormat[4]; glgetitegerv( GL_VIEWPORT, ormat); Výam: x, y, w, h x=ormat[], y=ormat[1], PGR 46

Zachováí poměru stra obrau aby ůstala kružice kulatá v proceduře reshape(it w, it h) registrováa jako Callback glutreshapefuc(reshape); Dva působy a) mešeím ormátu b) protažeím projekce PGR 47

Zachováí poměru stra obrau a) mešeím ormátu - bude evyužitá plocha oka i( w > h ) // oko široké glviewport((w-h)/,, h, h); else // oko vysoké glviewport(, (h-w)/, w, w); kresleé ekresleé kresleé ekresleé Nevyužitá plocha glviewport(,, w, h); x, y, w, h glviewport((w-h)/,, h, h); w > h Nevyužitá plocha PGR w <= h 48

Zachováí poměru stra obrau b) protažeím projekce (větší se pohledový objem) GLloat aspect = (GLloat) w / (GLloat) h; i( aspect > 1. ) // w > h => oko široké m = glm::ortho(-1.15*aspect, 1.15*aspect, -1.15, 1.15, -1, 1); else // let, right, bottom, top, ear, ar m = glm::ortho(-1.15, 1.15, -1.15/aspect, 1.15/aspect, -1, 1); glm::rustum(-1.15, 1.15, -1.15/aspect, 1.15/aspect,.1, 1); Obdobě: glm::perspective(6., aspect,.1, 1); kresleé ekresleé w > h => oko široké PGRlet*aspect right*aspect 49

Rotace podle Eulerových úhlů a Gimbal lock PGR 5

Rotace dle Eulerových úhlů Eulerovy úhly = pitch-yaw-roll (výška, kurs, rotace) komplexí otočeí rodělíme a otočeí dle os X, Y, Z X Y Z 1 cos() -si() si() cos() 1 cos() si() 1 -si() cos() 1 cos() -si() si() cos() 1 1 Rotate(, 1,, ) Rotate(,, 1, ) Rotate(,,, 1) PGR 51

Základí orietace Pitch-Yaw-Roll [NASA] PGR 5

Základí orietace Pitch-Yaw-Roll Pitch Yaw Roll Výškovky Kormidlo Křidélka [NASA] PGR 53

Gimbal [ džimbl] otočá podpěra -Tři gimbals spojeé dohromady + ávaží či setrvačík -Původí použití u gyroskopů a upevěí kompasů, kame a skleic a lodích od atiky. [Wikipedia] PGR 54

Rotace a Gimbal lock [ džimbl lok] Eulerovy úhly = pitch-yaw-roll (výška, kurs, rotace) komplexí otočeí rodě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 trátě jedoho stupě volosti (gimbal lock) y y x y x 1 3 x 1 Pořadí rotací v programu: Rotate(a, 1,, ) // X 3 Rotate(9,, 1, ) // Y Rotate(c,,, 1) // Z 1 Z splye s X Rotace kolem X s modelem otočeým o 9 dle Y dělá totéž, co rotace kolem Z PGR 55

Ztráta jedoho stupě Gimbal Lock [Wikipedia] [http://www.ho-emde.de/~homa/gimbal98.pd] PGR 56

Gimbal Lock [http://www.youtube.com/watch?v=c8bjo7mo] PGR 57

Virtual trackball Mapuje D plochu a 3D povrch polokoule Najde obecou osu a úhel => eastae gimbal lock!!! Kvaterioy vhodé pro ukládáí, sčítáí, atím se obejdeme be ich PGR 58

Virtual trackball - pricip Představa: objekt obale koulí se středem v počátku soustavy souřadic objektu a otáčí se vůči kameře resp. obraovce Dva body a deiují ačátek a koec otáčeí => Úhel a vektor obecé osy otáčeí [Ha-Wei] PGR 59

Virtual trackball - pricip Na áběr položíme polokouli Polokoule se a obraovku promíte jako kružice y [x,y,] t Myší adáme x a y x y [Ha-Wei] Promíteme polohu myši a povrch koule (pro x a y ískáme ) x PGR 6

Virtual trackball - pricip Promíteme polohu myši a povrch koule (pro x a y ískáme ) Koule o poloměru Bod a kouli se promítá a roviu Pro ámé vypočteme x [x,y,] t [Ha-Wei] y PGR 61

Virtual trackball - pricip Uložíme předchoí polohu myši a sledujeme aktuálí Normála roviy (,, ) je osa otáčeí okolo y Rotujeme objekt dle osy o správý úhel Původí trasormace Otočeí Nová trasormace x [Ha-Wei] Před iterakcí si uchováme původí modelovou matici Během iterakce k í akumulujeme ové otočeí Po dokočeí iterakce ji aktualiujeme dle posledího PGR 6

Virtual trackball 1. Detekuj stisk myši a ulož si 3D souřadice -> P1. Sleduj pohyb myši (drag) -> P a) Promíti D body P1, P a kouli b) Urči osu rotace od P1 k P (ormálu roviy) a úhel c) Přiásob pootočeí k rotaci trackballu d) Překresli scéu 3. Ukoči sledováí myši (uvolěí tlačítka) y mouse click [m x,m y ] viewport x x y [x,y,] [Ha-Wei] PGR 65 x [Ha-Wei] y

Virtual trackball - implemetace Proměá trackballrotatiomatrix obsahuje celkovou rotaci trackballu (poskládaou malých rotací od P1 k P) Při vykreslováí se skládá s aktuálí modelovou maticí (ásobí ji leva) glm::mat4 ewmodel = trackballrotatiomatrix * modelmatrix; a jako modelová matice používá se ta složeá // složeá modelová matice gluiormmatrix4v( modelmatrixlocatio, 1, GL_FALSE, glm::value_ptr(ewmodel)); drawmodel(); Vi demos/trackball-demo a pgr-framework/src/trackball.cpp PGR 66

Virtual trackball - implemetace 1. Detekce stisku myši a uložeí výchoích souřadic P1 //mouse butto pressed withi a widow or released void mousecb(it butto, it state, it x, it y) { i(butto == GLUT_LEFT_BUTTON) { i(state == GLUT_DOWN) { startgrabx = x; // poit P1 startgraby = y; glutmotiofuc(mousemotiocb); //. start mouse trackig retur; } else { // GLUT_UP glutmotiofuc(null); // 3. stop mouse trackig } } } PGR 67

Virtual trackball - implemetace. Sleduj pohyb myši -> P // mouse motio withi the widow with ay butto pressed (drag) void mousemotiocb(it x, it y) { edgrabx = x; // poit P edgraby = y; i(startgrabx!= edgrabx startgraby!= edgraby) { /* get rotatio icremet rom trackball */ trackball.addrotatio(startgrabx, startgraby, edgrabx,//abc) edgraby, wiwidth, wiheight); /* build rotatio matrix rom trackball rotatio */ trackball.getrotatiomatrix(trackballrotatiomatrix); startgrabx = edgrabx; // move poit P1 to curret P startgraby = edgraby; glutpostredisplay(); // d) } } PGR 68

Virtual trackball - implemetace abc) Přidáí pootočeí k celkové rotaci trackballu void CClassicTrackball::addRotatio( it startpoitx, it startpoity, it edpoitx, it edpoity, it wiwidth, it wiheight ) { loat edx, edy, startx, starty; i(startpoitx == edpoitx && startpoity == edpoity) retur; // o move => o rotatio mapscreecoords( startx, starty, startpoitx, startpoity,// a) wiwidth, wiheight); //D => 3D mapscreecoords( edx, edy, edpoitx, edpoity, // a) wiwidth, wiheight); //D => 3D glm::mat4 ewrotatio; // rotatio icremet computerotatio(ewrotatio, startx, starty, edx, edy); // b) // trackball rotatio = rotatio icremet * previous rotatio _rotatiomatrix = ewrotatio * _rotatiomatrix; // c) } PGR 69

Virtual trackball mapováí a kouli a) Mapováí souřadice myši a ormaliovaou kouli w_height 1 Myš OpeGL -1 1 w_width -1 Převod itervalu, w_width a rosah -1, 1 x = 1. + (scree_x / w_width) *. y = 1. (scree_y / w_height) *. PGR 7

Virtual trackball - implemetace a) Mapováí souřadice myši a plochu koule Myš OpeGL w_height widow coordiates mouse click [m x,m y ] 1 [x,y,] -1 1 w_width -1 void CTrackball::mapScreeCoords(loat& outx, loat& outy, it screex, it screey, it wiwidth, it wiheight) { outx = -1. +. * screex / wiwidth; outy = 1. -. * screey / wiheight; } PGR 71

Virtual trackball - implemetace b) Výpočet matice potočeí trackballu void CClassicTrackball::computeRotatio(glm::mat4& rotatio, loat startpoitx, loat startpoity, loat edpoitx, loat edpoity) { i(startpoitx == edpoitx && startpoity == edpoity) { rotatio = glm::mat4(1.); // Zero rotatio retur; } glm::vec3 axis; loat agle; computerotatioaxisadagle(axis, agle, startpoitx, startpoity, edpoitx, edpoity); } rotatio = glm::rotate(glm::mat4(1.), agle, axis); PGR 7

Virtual trackball - implemetace b) Výpočet osy otáčeí a úhlu #deie TRACKBALLSIZE (.8) void CTrackball::computeRotatioAxisAdAgle( glm::vec3& axis, loat& agle, loat startpoitx, loat startpoity, loat edpoitx, loat edpoity) { // Compute -coordiates or projectio o P1, P to sphere glm::vec3 p1(startpoitx, startpoity, projecttosphere(trackballsize, startpoitx, startpoity)); glm::vec3 p(edpoitx, edpoity, projecttosphere(trackballsize, edpoitx, edpoity)); axis = glm::ormalie(glm::cross(p1, p)); // AXIS // ALGLE to rotate aroud that axis. glm::vec3 d = p1 - p; // chord (tětiva), t=si(), / double t = glm::legth(d) / (. * TRACKBALLSIZE); //* Avoid problems with out-o-cotrol values...s i(t > 1.) t = 1.; i(t < -1.) t = -1.; agle = loat(radtodeg(. * asi(t))); // ANGLE d } // (i degrees) PGR 73 1

Virtual trackball - implemetace a) Projekce D bodu a kouli (uvitř) či hyperbolu (vě) loat CTrackball::projectToSphere(loat radius,loat x,loat y) { double d, t, ; d = sqrt(x*x + y*y); i(d < radius *.7716781186547544) { // Iside sphere = sqrt(radius*radius - d*d); } else { // O hyperbola t = radius / 1.414135637395488; = t*t / d; } } retur (loat); PGR 74

Virtual trackball Roger Crawis: Implemetig a Virtual Trackball or Examier Viewer, http://www.cse.ohio-state.edu/~crawis/cis781/slides/virtualtrackball.html pro starou veri OpeGL, kterou se de eučíme Mírě odlišý postup po celou dobu iterakce se vtahuje k prvímu bodu P1 Gavi Bell: Implemetatio o a virtual trackball https://github.com/dapig/coslam/blob/master/src/gui/trackball.cpp a.h Zde uvedeá vere trackballu PGR 75

Odkay [NASA] The begiers guide to aeroautics. NASA Gle Research Ceter, http://www.grc.asa.gov/www/k-1/airplae/ [Homa] Gerot Homa, http://www.ho-emde.de/~homa/gimbal98.pd [Ha-Wei] Ha-Wei She. Quaterio ad Virtual Trackball. CSE 781 Itroductio to 3D Image Geeratio, 7 http://www.cs.suysb.edu/~mueller/teachig/cse564/trackball.ppt PGR 76