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

Podobné dokumenty
7 Transformace 2D. 7.1 Transformace objektů obecně. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Rovinné přetvoření. Posunutí (translace) TEORIE K M2A+ULA

Geometrické transformace pomocí matic

Transformace (v OpenGL)

Hardware pro počítačovou grafiku NPGR019

Lineární transformace

transformace je posunutí plus lineární transformace má svou matici vzhledem k homogenním souřadnicím [1]

Geometrické vidění světa KMA/GVS ak. rok 2013/2014 letní semestr

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

Fakulta informačních technologíı. IZG cvičení 6. - Zobrazování 3D scény a základy OpenGL 1 / 38

Geometrické vidění světa KMA/GVS ak. rok 2013/2014 letní semestr

Afinní transformace Stručnější verze

7 Analytické vyjádření shodnosti

Matematika pro real-time grafiku

UNIVERZITA PARDUBICE FAKULTA ELEKTROTECHNIKY A INFORMATIKY

Transformace 2D. Transformace. Souřadnicové systémy. Vektorová a rastrová grafika. Přednáška 7

Afinní zobrazení, jeho regularita a (totální) singularita. Asociovaný homomorfismus. Analytické

= cos sin = sin + cos = 1, = 6 = 9. 6 sin 9. = 1 cos 9. = 1 sin cos 9 = 1 0, ( 0, ) = 1 ( 0, ) + 6 0,

Souřadnicové prostory

Matice. Je dána matice A R m,n, pak máme zobrazení A : R n R m.

Linearní algebra příklady

výsledek 2209 y (5) (x) y (4) (x) y (3) (x) 7y (x) 20y (x) 12y(x) (horní indexy značí derivaci) pro 1. y(x) = sin2x 2. y(x) = cos2x 3.

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

3. Souřadnicové výpočty

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

Základy OpenGL Josef Pelikán CGG MFF UK Praha. OpenGL / 34

Android OpenGL. Pokročilé shadery

transformace Idea afinního prostoru Definice afinního prostoru velké a stejně orientované.

DERIVACE. ln 7. Urči, kdy funkce roste a klesá a dále kdy je konkávní a

Matematika pro real-time grafiku

SPŠS Č.Budějovice Obor Geodézie a Katastr nemovitostí 4.ročník SOUŘADNICOVÉ SOUSTAVY VE FOTOGRAMMETRII

Transformujte diferenciální výraz x f x + y f do polárních souřadnic r a ϕ, které jsou definovány vztahy x = r cos ϕ a y = r sin ϕ.

ROZ1 CVIČENÍ VI. Geometrická registrace (matching) obrazů

14. TRANSFORMACE SOUŘADNÉHO SYSTÉMU

Přímá a inverzní kinematika manipulátoru pro NDT (implementační poznámky) (varianta 2: RRPR manipulátor)

Algoritmizace prostorových úloh

Návod k použití softwaru Solar Viewer 3D

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)

Připravil: David Procházka. Projekce

F A,B = Vektory baze vyjádřete jako aritmetické vektory souřadnic vzhledem

Rotace ve 3D a kvaterniony. Eva Blažková a Zbyněk Šír (MÚ UK) - Rotace ve 3D a kvaterniony 1 / 16

Obsah a průběh zkoušky 1PG

Mechanika

Geometrická zobrazení

Základy matematiky pracovní listy

QUADROTORY. Ing. Vlastimil Kříž

VIDEOSBÍRKA DERIVACE

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Patří mezi tzv. homotetie, tj. afinní zobrazení, která mají všechny směry samodružné.

Android OpenGL. Práce s texturami

Co je grafický akcelerátor

Počítačová grafika 2 (POGR2)

Euklidovský prostor Stručnější verze

Univerzita Pardubice Fakulta ekonomicko-správní. Počítačová grafika a geometrické transformace v rovině a prostoru. Eva Hladíková

Transformace dat mezi různými datovými zdroji

2D transformací. červen Odvození transformačního klíče vybraných 2D transformací Metody vyrovnání... 2

13 Barvy a úpravy rastrového

Syntetická geometrie I

Co byste měl/a zvládnout po 6. týdnu

Syntetická geometrie I

Digitální učební materiál

Kapitola 2. o a paprsek sil lze ztotožnit s osou x (obr.2.1). sil a velikost rovnou algebraickému součtu sil podle vztahu R = F i, (2.

Mechatronické systémy struktury s asynchronními motory

Model šestiosého robotu v prostředí Matlab

Programování shaderů GLSL

Fakulta informačních technologíı. Rendering Seminář 1. 1 / 28

9.1 Definice a rovnice kuželoseček

Výukové texty. pro předmět. Automatické řízení výrobní techniky (KKS/ARVT) na téma

i β i α ERP struktury s asynchronními motory

BPC2E_C08 Parametrické 3D grafy v Matlabu

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

Cvičení 2 PARAMETRICKÉ 3D MODELOVÁNÍ ROTAČNÍ SOUČÁST HŘÍDEL Inventor Professional 2012

Lineární zobrazení. 1. A(x y) = A(x) A(y) (vlastnost aditivity) 2. A(α x) = α A(x) (vlastnost homogenity)

VIDEOSBÍRKA DERIVACE

Programovatelné shadery a jazyk Cg. Petr Kmoch

1 Připomenutí vybraných pojmů

Symetrie molekul a stereochemie

1 Projekce a projektory

[1] Motivace. p = {t u ; t R}, A(p) = {A(t u ); t R} = {t A( u ); t R}

Geometrické transformace obrazu

Vektorový prostor. Př.1. R 2 ; R 3 ; R n Dvě operace v R n : u + v = (u 1 + v 1,...u n + v n ), V (E 3 )...množina vektorů v E 3,

Matematické základy počítačové grafiky Eduard Sojka, Martin Němec, Tomáš Fabián

Vlastní čísla a vlastní vektory

FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ MULTIKOPTÉRY. Ing. Vlastimil Kříž

Jak ovládat ručičku tachometru (ukazatel)?

BROB Základy robotiky. Ing. František Burian, Ph.D. Jan Macháček VUT ID: Martin Pavelka VUT ID:

Geometrické transformace obrazu a související témata. 9. přednáška předmětu Zpracování obrazů

Slajdy k přednášce Lineární algebra I

Základy matematiky pro FEK

Geekovo Minimum. Počítačové Grafiky. Nadpis 1 Nadpis 2 Nadpis 3. Božetěchova 2, Brno

Symetrie molekul a stereochemie

Geometrické transformace

2.5 Rovnováha rovinné soustavy sil

Reprezentace 3D modelu

Střední škola automobilní Ústí nad Orlicí

Dokumentace ke knihovně InsDevice

1.1. Spuštění ArchiCADu Práce s projektem Pracovní plocha 19

Katedra aplikované matematiky FEI VŠB Technická univerzita Ostrava

2. Vyplňování. Transformace.

Shodná zobrazení v rovině

Transkript:

Transforace (v OpenGL) příklady a knihovna GLM Petr Felkel, Jaroslav Sloup Katedra počítačové grafiky a interakce, ČVUT FEL ístnost KN:E-413 (Karlovo náěstí, budova E) E-ail: felkel@fel.cvut.cz Poslední zěna: 15.3.2016

Modelovací transforace w z y x Souřadnice okna Modelovací a pohledová transforace odelovací Transforace Pohledová transforace Projekční transforace + Ořezání (clipping) Transforace záběru (Viewport) odelovací souřadnice světové souřadnice souřadnice kaery (oka) Noralizované souřadnice zařízení vrchol Perspektivní dělení ořezávácí souřadnice 3D 2D 2

Mikropřehled transforací a jejich inverzí Následuje přehled základních transforačních atic + Způsob jejich vytvoření v knihovně GLM (OpenGL atheatics) GLM vychází se syntaxe GLSL Lze ji najít na adrese http://gl.g-truc.net/ Knihovna je součástí balíčku -fraework. Do verze GLM 0.9.5 používá stupně, Od verze GLM 0.9.6 používá radiany // načtení halviček transforací v knihovně GLM. V fraeworku je již uděláno #include <gl/gtc/atrix_transfor.hpp> 4

Identita Jednotková atice, například funkce M = Identity() y I= 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 z Výchozí pozice a natočení odelu x Používá se na inicializaci atice v příkazech, které násobí aktuální atici aticí nově definované transforace // vytvoření atice identity poocí knihovny GLM gl::at4 = gl::at4(1.0); 5

Matice posunutí (translace) Matice posunutí (translace) realizuje posunutí dané vektore = (resp. posune lokální soustavu souřadnic o stejné hodnoty) = 1 0 0 x a = 1 0 0 -x 0 1 0 y 0 1 0 -y 0 0 1 z 0 0 1 -z 0 0 0 1 0 0 0 1 // posunutí atice o zadaný vektor. Vynásobí atici atrix aticí posunutí o vector gl::at4 = gl::translate( atrix, vector ); 6

Posunutí v GLM /* set identity to atrix */ gl::at4 atrix = gl::at4(1.0); passmatrixtovertexshader( atrix ); drawmodel(); /* original odel */ /* add translation to atrix */ gl::at4 atrix1 = gl::translate( atrix, /* atrix to be odified */ gl::vec3(1.25f, 0.0f, 0.0f)); /* aount of translation */ passmatrixtovertexshader( atrix1 ); drawmodel(); /* iage 1 */ /* add another translation to atrix */ gl::at4 atrix2 = gl::translate( atrix, /* atrix to be odified */ gl::vec3(0.0f, 1.25f, 0.0f)); /* aount of translation */ passmatrixtovertexshader( atrix2 ); drawmodel(); /* iage 2 */ orig. odel iage 1 iage 2 7

Matice pro zěnu ěřítka (škálování) Matice pro zěnu ěřítka (škálování) Souřadné osy lokální soustavy souřadnic se prodlouží či zkrátí dle sx, sy a sz as nii se transforuje i přidružený objekt Ten se protáhne, srští, nebo překlopí S = sx 0 0 0 a S -1 = 1/sx 0 0 0 0 sy 0 0 0 1/sy 0 0 0 0 sz 0 0 0 1/sz 0 0 0 0 1 0 0 0 1 // atice zěny ěřítka na jednotlivých osách. Vynásobí atrix škálovací aticí gl::at4 = gl::scale( atrix, vector ); 8

Zěna ěřítka v GLM /* set identity to atrix */ gl::at4 atrix = gl::at4(1.0); passmatrixtovertexshader( atrix ); drawmodel(); /* original odel */ gl::at4 atrix1 = gl::scale( /* add scale transfor */ atrix, /* atrix to be odified */ gl::vec3(1.75f, 1.0f, 1.0f)); /* scale coefficients */ passmatrixtovertexshader( atrix1 ); drawmodel(); /* iage 1 */ gl::at4 atrix2 = gl::scale( /* add another scale transf. */ atrix, /* atrix to be odified */ gl::vec3(-1.0f, -2.75f, 1.0f)); /* scale coefficients */ passmatrixtovertexshader( atrix2 ); drawmodel(); /* iage 2 */ orig. odel iage 1 iage 2 9

Rotace kole obecné osy z Otočení kole zadané osy o úhel ve stupních Inverzní rotace = rotace okolo stejné osy o opačný úhel - y Let v = [x, y, z] T S = 0 -z y u = v/ v =[x, y, z ] T z 0 -x P=[x,y,z] -y x 0 x M R = u T u + cos (angle) (M I - u T u) + sin (angle) S 0 3 6 0 M R = 1 4 7 0 M I identity atrix direction of object rotation 2 5 8 0 coefficients of M R 0 0 0 1 // atice rotace o úhel angle kole obecné osy axis // (do GLM 0.9.5 ve stupních / GLM 0.9.6 radianech ) gl::at4 = gl::rotate( atrix, angle, axis ); 10

Rotace kole souřadných os Speciální případy rotací rotace podle souřadnicových os X Y Z y y y x x x Y X Z z z z 1 0 0 0 0 cos() -sin() 0 0 sin() cos() 0 0 0 0 1 cos() 0 sin() 0 0 1 0 0 -sin() 0 cos() 0 0 0 0 1 cos() -sin() 0 0 sin() cos() 0 0 0 0 1 0 0 0 0 1 Inverzní rotace = rotace okolo stejné osy o opačný úhel - 12

Rotace v GLM direction of object rotation orig. odel /* set identity to atrix */ gl::at4 atrix = gl::at4(1.0); passmatrixtovertexshader( atrix ); drawmodel(); /* original odel */ gl::at4 atrix1 = gl::rotate( /* add rotation */ atrix, /* atrix to be odified */ gl::radians(45), /* angle in degrees */ gl::vec3(1.0f, 0.0f, 0.0f)); /* rotation axis */ passmatrixtovertexshader( atrix1 ); drawmodel(); /* iage 1 */ gl::at4 atrix2 = gl::rotate( /* add another rotation */ atrix, /* atrix to be odified */ gl::radians( -45), /* angle in degrees */ gl::vec3(0.0f, 0.0f, 1.0f)); /* rotation axis */ passmatrixtovertexshader( atrix2 ); drawmodel(); /* iage 2 */ z y P=[1,0,0] x iage 1 y x z P=[0,0,1] iage 2 14

Rotace není koutativní Pozor! Záleží na pořadí transforací, neboť aticové násobení není koutativní! tj., R.T není totéž co T.R R.T.[ ] T.R.[ ] 16

Rotace následovaná translací T.R.[ ] /* set identity to atrix */ gl::at4 atrix = gl::at4(1.0); passmatrixtovertexshader( atrix ); drawmodel(); /* original odel */ atrix =gl::translate( /* add translation */ atrix, /* atrix to be odified */ gl::vec3(2.5f, 0.0f, 0.0f)); /* aount of translation */ atrix =gl::rotate( /* add rotation */ atrix, /* atrix to be odified */ gl::radians(45), /* angle in degrees */ gl::vec3(0.0f, 0.0f, 1.0f)); /* rotation axis */ passmatrixtovertexshader( atrix ); drawmodel(); /* transfored object */ filled transfored object dotted original odel 17

Translace následovaná rotací R.T.[ ] /* set identity to atrix */ gl::at4 atrix = gl::at4(1.0); passmatrixtovertexshader( atrix ); drawmodel(); /* original odel */ atrix =gl::rotate( /* add rotation */ atrix, /* atrix to be odified */ gl::radians(45), /* angle in degrees */ gl::vec3(0.0f, 0.0f, 1.0f)); /* rotation axis */ atrix =gl::translate( /* add translation */ atrix, /* atrix to be odified */ gl::vec3(2.5f, 0.0f, 0.0f)); /* aount of translation */ passmatrixtovertexshader( atrix ); drawmodel(); /* transfored object */ filled transfored object dotted original odel Kód je skoro stejný, jako v předchozí příkladu Zěnilo se pořadí T a R 18

Pohledová transforace w z y x souřadnice okna Modelovací a pohledová transforace odelovací Transforace Pohledová transforace Projekční transforace + Ořezání (clipping) Transforace záběru (Viewport) odelovací souřadnice světové souřadnice souřadnice kaery (oka) noralizované souřadnice zařízení vrchol Perspektivní dělení ořezávácí souřadnice 3D 2D 19

Pohledová transforace - LookAt gl::at4 gl::lookat( gl::vec3 const & eye, /* caera position */ gl::vec3 const & center, /* point on a line of sight */ gl::vec3 const & up ); /* caera up direction */ lookat( ) vytvoří pohledovou atici Kaeru uístí do eye = [eye X, eye Y, eye Z ] center center = [center X, center Y, center Z ] lib. bod ve sěru pohledu up = (up X, up Y, up Z ) sěr nahoru natočení kaery eye 20

Pohledová transforace - LookAt gl::at4 atrix =gl::lookat( ); passmatrixtovertexshader( atrix ); drawmodel(); gl::at4 atrix = gl::lookat( gl::vec3(1.0f, 0.0f, 1.0f), gl::vec3(0.0f, 0.0f, 0.0f), gl::vec3(0.0f, 1.0f, 0.0f) ); gl::at4 atrix = gl::lookat( ); gl::vec3( 1.0f, 1.0f, 0.0f), gl::vec3( 0.0f, 0.0f, 0.0f), gl::vec3(-1.0f, 0.0f, 0.0f) AE4M39 Coputer Graphics gl::at4 atrix = gl::lookat( gl::vec3(-1.0f, -0.5f, 1.0f), gl::vec3( 0.0f, 0.0f, 0.0f), gl::vec3( 0.0f, 1.0f, 0.0f) ); 21

Transforace v OpenGL zěna ěřítka scale v' x', y', z', w' T M.v Lineární složka: rotace (zkosení) rotation (shear) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 x y. z w posunutí translation transforovaný vrchol projekce projection atice pak není afinní vrchol před transforací vertex to be transfored [Sloup] (příští týden) 22

Vytvoření libovolné atice Matici ůžee inicializovat pole 16 hodnot ( 0, 1,..., 15 ) POZOR, z pole se převezou po sloupcích #include <gl/gtc/type_ptr.hpp> /* syetry with respect to xz-plane */ float initvalues[16] = { 1.0, 0.0, 0.0, 0.0, // first colun 0.0, -1.0, 0.0, 0.0, // second colun 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 }; gl::at4 atrix = gl::ake_at4(initvalues); orig. odel transfored odel passmatrixtovertexshader( atrix ); drawmodel(); 23

Obecná transforace pro zobrazení Cíle je složit ze tří atic správnou atici: M = projection * view * odel Matici předáe do Vertex Shaderu (uložena po sloupcích) Vertex shader provede násobení každého vrcholu 0 4 8 12 x T 1 5 9 13 y v' x', y', z', w' M.v. 2 6 10 14 z 3 7 11 15 w souřadnice k zobrazení na obrazové rovině souřadnice v objektové prostoru 24

Skládání transforací = násobení atic Matice se skládají násobení - přetížený operátor * vynásobí dvě atice M1 a M2 a výsledek uloží do nové atice atrix #include <gl/gtc/type_ptr.hpp> /* syetry with respect to xz-plane */ float initvalues[16] = { 1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 }; gl::at4 M1 = gl::ake_at4(initvalues); /* syetry - yz-plane */ gl::at4 M2 = gl::at4( gl::vec4(-1.0, 0.0, 0.0, 0.0), gl::vec4(0.0, 1.0, 0.0, 0.0,), gl::vec4(0.0, 0.0, 1.0, 0.0), gl::vec4(0.0, 0.0, 0.0, 1.0) ); gl::at4 atrix = M1 * M2; passmatrixtovertexshader( atrix ); drawmodel(); orig. odel after M1 transfored odel 25

Předání atice do Vertex Shader Ukázka pro předání všech tří atic a násobení vektoru aticei přío na grafické kartě: #version 330 in vec4 position; unifor at4 projection ; unifor at4 view ; unifor at4 odel; // P // E-1, V // O, M void ain() { vec4 worldpos = odel * position; vec4 caerapos = view * worldpos; gl_position = projection * caerapos; } 26

Na straně CPU je se atice nahraje na GPU poocí následujícího kódu projectionmatrixloc = glgetuniforlocation(theprogra, projection ); float ffrustuscale = 1.0f; float fznear = 0.5f; float fzfar = 3.0f; float atrix[16]; eset(atrix, 0, sizeof(float) * 16); atrix[0] = ffrustuscale; atrix[5] = ffrustuscale; atrix[10] = (fzfar + fznear) / (fznear - fzfar); atrix[14] = (2 * fzfar * fznear) / (fznear - fzfar); atrix[11] = -1.0f; gluseprogra(theprogra); gluniformatrix4fv(projectionmatrixloc, 1, GL_FALSE, atrix); gluseprogra(0); 27