Geometriai transzformációk

Hasonló dokumentumok
3D koordináta-rendszerek

Transzformációk. Grafikus játékok fejlesztése Szécsi László t05-transform

LINEÁRIS ALGEBRA. matematika alapszak. Euklideszi terek. SZTE Bolyai Intézet, őszi félév. Euklideszi terek LINEÁRIS ALGEBRA 1 / 40

Vektorterek. =a gyakorlatokon megoldásra ajánlott

Összeállította: dr. Leitold Adrien egyetemi docens

Vektorok, mátrixok, lineáris egyenletrendszerek

Számítógépes Grafika mintafeladatok

Valasek Gábor Informatikai Kar. 2016/2017. tavaszi félév

KOVÁCS BÉLA, MATEMATIKA I.

Tartalom. Nevezetes affin transzformációk. Valasek Gábor 2016/2017. tavaszi félév

x = cos αx sin αy y = sin αx + cos αy 2. Mi a X/Y/Z tengely körüli forgatás transzformációs mátrixa 3D-ben?

Lin.Alg.Zh.1 feladatok

17. előadás: Vektorok a térben

Robotika. Kinematika. Magyar Attila

Matematika A1a Analízis

VIK A2 Matematika - BOSCH, Hatvan, 3. Gyakorlati anyag. Mátrix rangja

Diszkrét matematika I., 12. előadás Dr. Takách Géza NyME FMK Informatikai Intézet takach november 30.

Mátrixok 2017 Mátrixok

Komplex számok. Wettl Ferenc előadása alapján Wettl Ferenc előadása alapján Komplex számok / 18

Matematika (mesterképzés)

Kalkulus. Komplex számok

Transzformációk síkon, térben

Transzformációk. Szécsi László

Vektorok. Wettl Ferenc október 20. Wettl Ferenc Vektorok október / 36

Lin.Alg.Zh.1 feladatok

Ortogonalizáció. Wettl Ferenc Wettl Ferenc Ortogonalizáció / 41

Keresztmetszet másodrendű nyomatékainak meghatározása

1. zárthelyi,

Számítási feladatok a Számítógépi geometria órához

Haladó lineáris algebra

1. A komplex számok ábrázolása

1.1. Vektorok és operátorok mátrix formában

Az egyenlőtlenség mindkét oldalát szorozzuk meg 4 16-al:

Testek. 16. Legyen z = 3 + 4i, w = 3 + i. Végezzük el az alábbi. a) (2 4), Z 5, b) (1, 0, 0, 1, 1) (1, 1, 1, 1, 0), Z 5 2.

Budapesti Műszaki Főiskola, Neumann János Informatikai Kar. Vektorok. Fodor János

1. Mátrixösszeadás és skalárral szorzás

Hajder Levente 2017/2018. II. félév

Kvadratikus alakok és euklideszi terek (előadásvázlat, október 5.) Maróti Miklós, Kátai-Urbán Kamilla

Infobionika ROBOTIKA. X. Előadás. Robot manipulátorok II. Direkt és inverz kinematika. Készült a HEFOP P /1.0 projekt keretében

Vektorgeometria (1) First Prev Next Last Go Back Full Screen Close Quit

Gyakorló feladatok I.

Összeállította: dr. Leitold Adrien egyetemi docens

Mer legesség. Wettl Ferenc Wettl Ferenc Mer legesség / 40

Komplex számok. (a, b) + (c, d) := (a + c, b + d)

Térbeli transzformációk, a tér leképezése síkra

KOVÁCS BÉLA, MATEMATIKA I.

Számítógépes Grafika mintafeladatok

Összeállította: dr. Leitold Adrien egyetemi docens

Bevezetés az algebrába 2

1. Generátorrendszer. Házi feladat (fizikából tudjuk) Ha v és w nem párhuzamos síkvektorok, akkor generátorrendszert alkotnak a sík vektorainak

Feladatok a Gazdasági matematika II. tárgy gyakorlataihoz

8. előadás. Kúpszeletek

1. A komplex számok definíciója

1. Lineáris transzformáció

Lineáris leképezések. Wettl Ferenc március 9. Wettl Ferenc Lineáris leképezések március 9. 1 / 31

Intergrált Intenzív Matematika Érettségi

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Bevezetés az algebrába 1

Gauss-eliminációval, Cholesky felbontás, QR felbontás

Lineáris algebra mérnököknek

Klár Gergely 2010/2011. tavaszi félév

Láthatósági kérdések

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Képfeldolgozás. 1. el adás. A képfeldolgozás m veletei. Mechatronikai mérnök szak BME, 2008

I. VEKTOROK, MÁTRIXOK

karakterisztikus egyenlet Ortogonális mátrixok. Kvadratikus alakok főtengelytranszformációja

Diszkrét matematika 1. estis képzés

Segédlet: Főfeszültségek meghatározása Mohr-féle feszültségi körök alkalmazásával

Diszkrét matematika 1.

2014/2015. tavaszi félév

1. feladatsor Komplex számok

Lineáris algebra zárthelyi dolgozat javítókulcs, Informatika I márc.11. A csoport

Valasek Gábor

9. előadás. Térbeli koordinátageometria

1. Az euklideszi terek geometriája

Transzformációk, amelyek n-dimenziós objektumokat kisebb dimenziós terekbe visznek át. Pl. 3D 2D

Matematika A2 vizsga mgeoldása június 4.

15. LINEÁRIS EGYENLETRENDSZEREK

5. előadás. Skaláris szorzás

Miért fontos számunkra az előző gyakorlaton tárgyalt lineáris algebrai ismeretek

O ( 0, 0, 0 ) A ( 4, 0, 0 ) B ( 4, 3, 0 ) C ( 0, 3, 0 ) D ( 4, 0, 5 ) E ( 4, 3, 5 ) F ( 0, 3, 5 ) G ( 0, 0, 5 )

Lineáris egyenletrendszerek

Determinánsok. A determináns fogalma olyan algebrai segédeszköz, amellyel. szolgáltat az előbbi kérdésekre, bár ez nem mindig hatékony.

12. előadás. Egyenletrendszerek, mátrixok. Dr. Szörényi Miklós, Dr. Kallós Gábor

Számítógépes geometria

6. gyakorlat. Gelle Kitti. Csendes Tibor Somogyi Viktor. London András. jegyzetei alapján

Komplex számok trigonometrikus alakja

OpenGL és a mátrixok

Matematikai statisztika 1.

Lineáris Algebra. Tartalomjegyzék. Pejó Balázs. 1. Peano-axiomák

Mátrixok, mátrixműveletek

2. előadás. Lineáris algebra numerikus módszerei. Mátrixok Mátrixműveletek Speciális mátrixok, vektorok Norma

Analízis elo adások. Vajda István szeptember 10. Neumann János Informatika Kar Óbudai Egyetem. Vajda István (Óbudai Egyetem)

Lineáris algebra és a rang fogalma (el adásvázlat, szeptember 29.) Maróti Miklós

Matematika osztályozó vizsga témakörei 9. évfolyam II. félév:

Gauss elimináció, LU felbontás

1. Komplex számok. x 2 = 1 és x 2 + x + 1 = 0. egyenletek megoldását számnak tekinthessük:

Hajder Levente 2018/2019. II. félév

Függvények Megoldások

Hajder Levente 2014/2015. tavaszi félév

Átírás:

Geometriai transzformációk 1 / 84

Geometriai transzformációk Objektumok transzformálása és animálása a 3D-s színtéren Mátrix és oszlop vektor szorzása x = Ax x transzformált oszlopvektor (vertex pozíció) A transzformációs mátrix (transzformációt leíró mátrix) x transzformálandó oszlopvektor (vertex pozíció) x = Bx = BAx 2 / 84

Transzformációs csővezeték 3 / 84

Transzformációs csővezeték Objektumtér Modellező transzformáció Világtér Nézeti transzfomáció Kameratér Vetületi transzformáció Vágótér Perspektívikus osztás Normalizált eszköztér Nézet-ablak és mélység távolság transzformáció Ablaktér 4 / 84

Transzformációs csővezeték Objektumtér Vertex pozíció meghatározása egy koordináta rendszerben Minden objektum egy saját objektumtérrel rendelkezik Pozíció ábrázolása vektorként (pl. koordináta-hármasok) Transzformációk segítségével az egyik térben lévő pozíciót egy másik térben lévő pozícióra képezünk le Normálvektor Adott felületre merőleges egység hosszú vektor 5 / 84

Transzformációs csővezeték Homogén koordináták Négy-komponensű (x, y, z, w) alak Egy Descartes koordinátával megadott (x, y, z) helyvektor speciális esete (x, y, z, w) = (x, y, z, w ), ha egy olyan h 0, hogy x = hx, y = hy, z = hz, w = hw w = 0 homogén pozíció esetén végtelenben lévő pont (0, 0, 0, 0) homogén koordináta nem megengedett 6 / 84

Transzformációs csővezeték Homogén koordináták w 0 esetén (x, y, z, w) szokásos jelölése ( x w, y w, z w, 1) (x, y, z) Descartes koordinátához egy 1-est negyedik komponensként hozzávéve adhatjuk meg a homogén alakot (x, y, z, 1) Egy (x, y, z, w) homogén pozíció homogén osztás után (x, y, z, 1) pozícióként fog megjelenni Az utolsó 1-es komponens elhagyásával kapjuk meg a homogén pozícióhoz tartozó Descartes koordinátát 7 / 84

Transzformációs csővezeték Világtér Objektumok között nincsenek térbeli viszonyok definiálva az objektumtéren Az objektumok egymáshoz való viszonyuk meghatározása/megadása Egy objektumtérben lévő modell homogén vertex pozíciójának (w = 1) modellező transzformációval való szorzása A modell világtérbe transzformált pozíciója 8 / 84

Transzformációs csővezeték Világtér - Modellező transzformáció 3D-s modellek elhelyezése a világtérben Forgatás Eltolás Skálázás... Transzformáció megadása 4 4-es homogén transzformációs mátrixok Több transzformáció kombinálása mátrix szorzással egyetlen egy 4 4-es mátrixba 9 / 84

Transzformációs csővezeték Kameratér Egy bizonyos nézőpontból tekintünk a létrehozott színtérre A szem a koordináta-rendszer origójában van Azt a transzformációt, ami a világtéren lévő pozíciókat a kameratérre viszi át nézeti transzformációnak nevezzük 10 / 84

Transzformációs csővezeték Kameratér - Nézeti transzformáció 4 4-es mátrix Tipikus nézeti transzformáció a világtéren lévő kamera pozícióját a kameratér origójába viszi Eltolás és elforgatás Meghatározza a kamera helyét és irányítottságát Modell-nézeti mátrix Árnyalási számítások kamera- vagy objektumtérben A modellező és nézeti transzformációs mátrixok összeszorzása 11 / 84

Transzformációs csővezeték Eltolás T eltolás mátrix T(t) = T(t x, t y, t z ) = 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 T(t) alkalmazásával egy p pontot a p pontba tolhatunk p = (p x + t x, p y + t y, p z + t z, 1). Inverz transzformációs mátrix T(t) 1 = T( t) 12 / 84

Transzformációs csővezeték Forgatás R x (φ), R y (φ) és R z (φ) forgatási mátrixok x, y és z tengelyek körüli forgatás φ szöggel R x (φ) = R y (φ) = R 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 13 / 84

Transzformációs csővezeték Forgatás Bal-felső 3 3-as részmátrix diagonális elemeinek összege (mátrix nyoma) állandó tr(r) = 1 + 2 cos φ Forgatási mátrix ortogonális mátrix Inverze megegyezik a mátrix transzponáltjával R 1 = R T Inverz forgatási mátrix R 1 i (φ) = R i ( φ) Forgatási mátrix determinánsa mindig eggyel egyenlő 14 / 84

Transzformációs csővezeték Forgatás A z tengellyel párhuzamos, p ponton átmenő tengely körüli forgatás X = T(p)R z (φ)t( p) T(-p) y y p x p x y y R z( /4) p x p x T(p) 15 / 84

Transzformációs csővezeték Skálázás S(s) = S(s x, s y, s z ) (ahol s x 0, s y 0 és s z 0) skálázó mátrix az x, y és z irányokban az s x, s y és s z értékekkel skáláz (kicsinyít/nagyít) S(s) = Uniform skálázás s x = s y = s z Inverz skálázás S 1 (s) = S(1/s x, 1/s y, 1/s z ) s x 0 0 0 0 s y 0 0 0 0 s z 0 0 0 0 1 16 / 84

Transzformációs csővezeték Skálázás Uniform skálázási mátrix létrehozása Egy homogén koordináta-vektor w komponensének a manipulációjával S(s) = 5 0 0 0 0 5 0 0 0 0 5 0 0 0 0 1 = Tükröző mátrix, ha s három értékéből egy negatív 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1/5 17 / 84

Transzformációs csővezeték Skálázás Adott irányba történő skálázás f x, f y és f z ortonormált vektorok mentén F mátrix létrehozása F = ( f x f y f z 0 0 0 0 1 F inverzével szorzunk vagyis az F mátrix transzponáltjával Skálázás majd visszatranszformálás X = FS(s)F T ) 18 / 84

Transzformációs csővezeték Nyírás Hat alap nyírást H xy (s), H xz (s), H yx (s), H yz (s), H zx (s), H zy (s) mátrixokkal jelöljük Első index azt a koordinátát jelöli, amelyet a nyíró mátrix megváltoztat Második index azt koordinátát jelöli, amely értékétől a változás mértéke függ H xz (s) nyíráshoz tartozó mátrix 1 0 s 0 0 1 0 0 H xz (s) = 0 0 1 0 0 0 0 1 19 / 84

Transzformációs csővezeték Nyírás P = (p x, p y, p z ) T pontot balról megszorozva P = H xz (s)p = (p x + sp z, p y, p z ) T z z H xz ( s) s x Az y és z értékek nem változnak a transzformáció során x 20 / 84

Transzformációs csővezeték Nyírás H ij (s) (ahol i j) mátrix inverze Ellentétes irányba való nyírás (s) = H ij ( s) H 1 ij Nyírás más formában való megadása 1 0 s 0 H 0 1 t 0 xy(s, t) = 0 0 1 0 0 0 0 1 A két indexszel azt jelöljük, hogy két koordinátát nyírunk a harmadikkal H ij (s, t) = H ik(s)h jk (t), ahol k a harmadik koordinátát jelöli A nyírás térfogat megörző transzformáció H = 1 21 / 84

Transzformációs csővezeték Transzformációk összefűzése Mátrix szorzás nem kommutatív Transzformációk végrehajtásának a sorrendje hatással van az eredményre Tetszőleges N és M mátrixokra NM MN TRSp = T(R(Sp)) y y y R z( /6) S(s) x x x y y y S(s) R z( /6) x x x 22 / 84

Transzformációs csővezeték Merevtest-transzformáció Csak eltolás és forgatás transzformációk összefűzésével áll elő A hosszakat és szögeket megőrzi Felírható T(t) eltolás- és R elforgatásmátrix szorzataként Inverze kiszámítható X = T(t)R = r 00 r 01 r 02 t x r 10 r 11 r 12 t y r 20 r 21 r 22 t z 0 0 0 1 X 1 = (T(t)R) 1 = R 1 T(t) 1 = R T T( t) 23 / 84

Transzformációs csővezeték Merevtest-transzformáció Az inverz másképpen is kiszámítható R = (r,0 r,1 r,2 ) = r T 0, r T 1, r T 2, ( ) R t X = 0 T 1 ( ) X 1 r = 0, r 1, r 2, R T t 0 0 0 1 24 / 84

Transzformációs csővezeték Normálvektor transzformációja Lineáris transzformációk esetén pontok különbségének a képe a képek különbsége A(x 1 x 2 ) = Ax 1 Ax 2 Nem szögtartó transzformációkat tartalmazó mátrixok skálázás, nyírás Nem mindig használhatóak fel normálvektorok transzformációjára A normálvektorokat a geometriai transzformációs mátrix inverzének a transzponáltjával kell megszorozni M geometriai transzformáció N = (M 1 ) T 25 / 84

Transzformációs csővezeték Normálvektor transzformációja Gyakorlatban Csak forgatások alkalmazása esetén Mátrix inverze maga a transzponált mátrix Nem kell kiszámolni az inverzet Csak eltolások alkalmazása esetén Nincs hatással a normálvektor irányára Eltolás és forgatások után nem kell normalizálni Megőrzik a hosszokat Több uniform skálázás alkalmazása esetén Az irány nem módosul Csak a hosszát kell normalizálni Ha ismerjük a skálázás mértékét, akkor osztással elvégezhető Ha mégis ki kell számolni az inverzet Elegendő a mátrix bal felső 3 3-as mátrixának az adjungáltjának a transzponáltját meghatározni Osztásra nincs szükség, mivel végül normalizálni kell 26 / 84

Transzformációs csővezeték Inverzek kiszámítása Ha a mátrix egy transzformációt vagy egyszerű transzformációk sorozatát tartalmazza adott paraméterekkel A mátrixot egyszerűen lehet invertálni a paraméterek invertálásával és a mátrixok sorrendjének a megfordításával M = T(t)R(φ), akkor M 1 = R( φ)t( t) Ha a transzformációs mátrix ortogonális A mátrix transzponáltja az inverze M = M T Ha semmilyen információnk nincs Adjungált módszer Cramer szabály LU felbontás Gauss elimináció 27 / 84

Transzformációs csővezeték Vágótér A kameratérben lévő primitíveket a képsíkra kell leképezni A homogén koordináták miatt w súllyal vannak módosítva Kanonikus térfogat Normalizált eszköz koordináták Vágókockán kívül eső objektumok levágása Kameratér koordinátáit a vágótér koordinátáiba a vetületi transzformáció segítségével transzformáljuk át 28 / 84

Transzformációs csővezeték Vágótér - Vetületi transzformáció A nézeti térfogat pontos alakja a vetületi transzformáció típusától függ A perspektív transzformáció egy csonka gúlát határoz meg Az ortogonális vetítés egy téglatestet visz át vágókockába Adott térfogaton belül lévő alakzatok láthatóak 29 / 84

Vetületi transzformáció Ortogonális vetítés Párhuzamos vonalak párhuzamosak maradnak Legegyszerűbb transzformációs mátrix 1 0 0 0 0 1 0 0 P O = 0 0 0 0 0 0 0 1 P O nem invertálható, mivel a determinánsa P O = 0 30 / 84

Vetületi transzformáció Ortogonális vetítés A néző számára probléma, hogy a pozitív és a negatív z értékeket levetíti a vetítési síkra z irányba nem lehet vágást végrehajtani A takarásban lévő felületek kezelése problémás x, y és z értékek bizonyos intervallumra való lekorlátozása Például a közeli síktól a távoli síkig 31 / 84

Vetületi transzformáció Ortogonális vetítés Mátrix megadása egy hatossal (l, r, b, t, n, f ) bal, jobb, alsó, felső, közeli és távoli síkok megjelölése A mátrix skálázza és eltolja az ezekkel a síkokkal kialakított Tengelyhez Igazított Befoglaló Dobozt Origó középpontú, tengelyhez-igazított vágókockába Bal-alsó sarka (l, b, n) Jobb-felső sarka (r, t, f ) 32 / 84

Vetületi transzformáció Ortogonális vetítés OpenGL-ben a z-tengely negatív része felé nézünk z féltérben lévő modelleket szeretnénk megjeleníteni n > f, mivel a z-tengely negatív irányába nézünk Könnyebb dolgunk van akkor, ha a közeli értékek kisebbek, mint a távoliak Felfoghatóak pozitív távolságoknak a nézeti irány mentén Nem pedig z szem koordináta értékekként 33 / 84

Vetületi transzformáció Ortogonális vetítés Ortogonális transzformációs mátrix megadása: P o = S(s)T(t) = = 2 r l 0 0 0 1 0 0 r+l 2 2 0 t b 0 0 0 1 0 t+b 2 2 0 0 f n 0 0 0 1 f +n 2 0 0 0 1 0 0 0 1 2 r l 0 0 r+l r l 2 0 t b 0 t+b t b 2 0 0 f n f +n f n 0 0 0 1 A mátrix invertálható = T( t)s((r l)/2, (t b)/2, (f n)/2)) P 1 o 34 / 84

Vetületi transzformáció Perspektív vetítés Perspektív vetítési mátrix z = d, d > 0 síkra képez le A nézőpont az origóban van Egy p pontot vetítünk Képe q = (q x, q y, d) Hasonló háromszögek q x p x = d p z q y = d py p z q z = d = q x = d px p z y q z=-d p p z z=-d q p z x z q x p x x 35 / 84

Vetületi transzformáció Perspektív vetítés P p = q = P p p = = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1/d 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1/d 0 p x p y p z p z /d p x p y p z 1 dp x /p z dp y /p z d 1 = Az utolsó lépésben a w komponenssel elosztjuk a vektort 36 / 84

Vetületi transzformáció Perspektív vetítés Van egy perspektív transzformáció, amely a nézeti csonka gúlát a kanonikus nézeti térfogatba transzformálja Csonka gúla nézet esetén feltesszük z = n-ben kezdődik és a z = f -ben végződik 0 > n > f értékek esetén Téglalap z = n esetén Bal alsó sarok (l, b, n) Jobb felső sarok (r, t, n) 37 / 84

Vetületi transzformáció Perspektív vetítés A kamera nézeti csonka gúlájának meghatározása (l, r, b, t, n, f ) A vízszintes látómezőt a csonka gúla bal és jobb síkjai között lévő szög határozza meg A függőleges látómezőt az alsó és felső síkok közötti szög Minél nagyobb a látószög, annál többet lát a kamera Aszimmetrikus csonka gúla - sztereó látás r l vagy t b értékekkel hozhatunk létre 38 / 84

Vetületi transzformáció Perspektív vetítés Látómező - Színtér észlelése Számítógép képernyője Szem fizikai látó mezeje φ = 2 arctan(w/(2d)) φ a látómező w a színtér szélessége d az objektumtól való távolság Szélesebb látómezőt beállítva az objektumok torzítva fognak megjelenni Perspektív transzformációs mátrix A csonka gúlát az egység kockába transzformálja P p = 2n r l 0 r+l 0 2n t b r l 0 t+b t b 0 2fn f n f +n 0 0 f n 0 0 1 0 39 / 84

Vetületi transzformáció Perspektív vetítés q = (q x, q y, q z, q w ) T pontot transzformálva w komponens értéke (a legtöbb esetben) nem nulla lesz és nem lesz egyenlő eggyel A vetített p ponthoz osztanunk kell q w -vel p = (q x /q w, q y /q w, q z /q w, 1) T 40 / 84

Vetületi transzformáció Perspektív vetítés A P p mátrix A z = f -et +1-re és a z = n-et 1-re képezi le A perspektív transzformáció végrehajtása után vágással és homogenizálással kapjuk meg a normalizált eszköz koordinátákat Először a S(1, 1, 1) mátrixszal szorzunk A közeli és távoli értékek pozitív értékek lesznek 41 / 84

Vetületi transzformáció Perspektív vetítés A normalizált eszköz koordináták A vágási koordináták homogén formában vannak tárolva x és y értékekre van szükségünk mélységi értékekkel Perspektív osztás w-vel elosztjuk x, y és z értékeket A geometriai adatok egy egységkockán belül lesznek 42 / 84

Vetületi transzformáció Perspektív vetítés Ablak koordináták A normalizált vertex koordinátákat átkonvertáljuk a végső koordináta rendszerbe x és y pixel pozíciókat használunk Nézeti ablak Adott ablakon belüli tér meghatározása aktuális képernyő koordinátákban A raszterizáló a vertexekből pontokat, vonalakat és poligonokat állít elő Mélység-távolság transzformáció A vertexek z értékeit skálázza be a mélységpuffer értékeinek az intervallumába 43 / 84

Cg példa Transzformált vertex pozíciók A vertex programok vertex pozíciókat kapnak az objektum térben A program mindegyik vertex-et megszorozza a modell-nézeti és vetületi mátrix-szal, mely a vágási területre viszi a vertex-eket Gyakorlatban két mátrix konkatenációja Egy mátrix szorzás 44 / 84

Cg példa Transzformált vertex pozíciók Példa v o i d C4E1v_transform ( f l o a t 4 p o s i t i o n : POSITION, out f l o a t 4 o P o s i t i o n : POSITION, out f l o a t 4 c o l o r : COLOR, u n i f o r m f l o a t 4 x 4 modelviewproj ) { // A p o z í c i ó t r a n s z f o r m á l á s a // az o b j e k t u m é r b ő l a v á g ó t é r b e o P o s i t i o n = mul ( modelviewproj, p o s i t i o n ) ; } c o l o r = f l o a t 4 ( 0. 8, 0. 8, 0. 8, 1. 0 ) ; 45 / 84

Speciális transzformációk 46 / 84

Speciális transzformációk Euler transzformáció Egy tetszőleges forgatás megadására Alkalmas egy kamera irányítottság beállítására A kamera az origóban, z tengely negatív irányába néz, a felfele mutató irány az y tengely pozitív irányába mutat Három mátrix szorzata E(h, p, r) = R z (r)r x (p)r y (h) Billentő x y Forduló Csavaró -z 47 / 84

Speciális transzformációk Euler transzformáció Az E forgatások összefűzésével áll elő Ortogonális Inverze könnyen kiszámítható E 1 = E T = (R z R x R y ) T = R T y R T x R T z Az E mátrix transzponáltja egyszerűbb Euler szögek (h, p és r) 48 / 84

Speciális transzformációk Euler transzformáció Gimbal lock A forgatások miatt egy szabadsági fokot elveszítünk h = 0, p = 90 Ezután a z-tengely körüli forgatás lényegében az y-tengely körüli forgatásnak felel meg Nem tudunk a z világtengely körül forgatni 49 / 84

Speciális transzformációk Euler transzformáció E(h, π/2, r) = = cos r cos h sin r sin h 0 cos r sin h + sin rcosh sin r cos h + cos r sin h 0 sin r sin h cos r cos h 0 1 0 cos(r + h) 0 sin(r + h) sin(r + h) 0 cos(r + h) 0 1 0 50 / 84

Speciális transzformációk Paraméterek kinyerése az Euler transzformációból F = Feladat: a h, p és r Euler paraméterek kinyerése az ortogonális mátrixból F = f 00 f 01 f 02 f 10 f 11 f 12 f 20 f 21 f 22 = R z (r)r x (p)r y (h) = E(r, p, h) cos r cos h sin r sin p sin h sin r cos p cos r sin h + sin r sin p cos h sin r cos h + cos r sin p sin h cos r cos p sin r sin h cos r sin p cos h cos p sin h sin p cos p cos h 51 / 84

Speciális transzformációk Paraméterek kinyerése az Euler transzformációból cos p 0 cos p = 0 f 01 = f 11 = 0 sin p = ±1 F = ( A többi paramétert h = 0-ra sin r/ cos r = tan r = f 10 /f 00 r = arctan(f 10 /f 00 ) h = arctan( f 20 f 22 ), p = arcsin(f 21 ), r = arctan( f 01 f 11 ). cos(r ± h)) 0 sin(r ± h) sin(r ± h) 0 cos(r ± h) 0 ±1 0 ) 52 / 84

Speciális transzformációk Mátrix felbontás Különböző transzformációk paramétereinek meghatározása Transzformációk összefűzésével előállított mátrixból Különböző esetek Csak a skálázási paramétereket nyerjük ki Meghatározni azt, hogy a modellen csak egy merevtest-transzformációt alkalmaztak-e vagy sem Egy animáció kulcspozíciói közötti interpolálás végrehajtása A nyírások eltávolítása a forgatási mátrixból 53 / 84

Speciális transzformációk Mátrix felbontás Felbontások Eltolás és forgatási mátrix származtatása Triviális eltolási értékek kinyerése merevtest-transzformáció esetén Ortogonális mátrix utolsó oszlopa A mátrix determinánsa meghatározza, hogy végrehajtottak-e tükrözést A forgatás, skálázás és nyírás szétválasztása komolyabb erőfeszítést igényel 54 / 84

Speciális transzformációk Forgatás tetszőleges tengely mentén r forgatási tengely normalizált A transzformáció α szöggel forgat r körül Találni kell két másik egység hosszú tetszőleges tengelyt Egymásra és r-rel ortogonálisak (merőlegesek), azaz ortonormáltak Ezek bázist alkotnak Ötlet A bázist változtassuk meg az alapról az új bázisra Forgassuk el az adott objektumot α szöggel mondjuk az x-tengely körül Transzformáljunk vissza az alap bázisba 55 / 84

Speciális transzformációk Forgatás tetszőleges tengely mentén Számítsuk ki a bázis ortonormált tengelyeit Az első tengely az r A második s-tengely megkeresése t = r s Numerikusan stabil módszer r abszolút értékben legkisebb komponensének 0-ra állítása A két másik komponens megcserélése után negáljuk az elsőt ezek közül 56 / 84

Speciális transzformációk Forgatás tetszőleges tengely mentén Az r, s és t vektort helyezzük el egy mátrix soraiban r T M = s T t T A mátrix az r vektort az x-tengelybe, az s vektort az y-tengelybe és a t vektort a z-tengelybe transzformálja X = M T R x (α)m. (1) 57 / 84

Speciális transzformációk Forgatás tetszőleges tengely mentén Goldman módszere Tetszőleges normalizált r-tengely körüli forgatásra φ szöggel R = ( cos φ + (1 cos φ)rx 2 (1 cos φ)r x r y r z sin φ (1 cos φ)r x r z + r y sin φ (1 cos φ)r x r y + r z sin φ cos φ + (1 cos φ)ry 2 (1 cos φ)r y r z r x sin φ (1 cos φ)r x r z r y sin φ (1 cos φ)r y r z + r x sin φ cos φ + (1 cos φ)rz 2 ) 58 / 84

Kvaterniók 59 / 84

Kvaterniók A kvaterniókat vektorként ábrázoljuk és ˆq-val jelöljük A ˆq kvaterniót a következőképpen definiáljuk ˆq = (q v, q w ) = iq x + jq y + kq z + q w = q v + q w q v = iq x + jq y + kq z = (q x, q y, q z ) i 2 = j 2 = k 2 = 1, jk = kj = i, ki = ik = j, ij = ji = k ˆq kvaternió valós része q w A képzetes része q v, ahol i, j és k a képzetes egységek q v képzetes részen értelmezve van az összes vektor művelet Például a skálázás, skaláris szorzat és kereszt szorzat 60 / 84

Kvaterniók Kvaterniók szorzata Két ˆq és ˆr szorzatát a következőképpen tudjuk levezetni A képzetes egységek szorzása nem kommutatív ˆqˆr = (iq x + jq y + kq z + q w )(ir x + jr y + kr z + r w ) = i(q y r z q z r y + r w q x + q w r x ) + j(q z r x q x r z + r w q y + q w r y ) + k(q x r y q y r x + r w q z + q w r z ) + q w r w q x r x q y r y q z r z = = (q v r v + r w q v + q w r v ), q w r w q v r v 61 / 84

Kvaterniók Összeadás, norma, egység és az inverz Összeadás: ˆq + ˆr = (q v + r v, q w + r w ) Konjugált: ˆq = (q v, q w ) = ( q v, q w ) Norma: n(ˆq) = ˆqˆq = ˆq ˆq = q v q v + q 2 w = q 2 x + q 2 y + q 2 z + q 2 w Egység: î = (0, 1) Multiplikatív inverz esetén ˆq 1ˆq = ˆqˆq 1 = 1 n(ˆq) 2 = ˆqˆq ˆqˆq n(ˆq) 2 = 1 ˆq 1 = 1 n(ˆq) 2 ˆq 62 / 84

Kvaterniók Konjugálási szabályok (ˆq ) = ˆq (ˆq + ˆr) = ˆq + ˆr (ˆqˆr) = ˆr ˆq Normálási szabályok n(ˆq ) = n(ˆq) n(ˆqˆr) = n(ˆq)n(ˆr) Linearitás ˆp(sˆq + tˆr) = sˆpˆq + tˆpˆr (sˆp + tˆq)ˆr = sˆpˆr + tˆqˆr Asszocivitás ˆp(ˆqˆr) = (ˆpˆq)ˆr 63 / 84

Kvaterniók Egységkvaternió ˆq = (q v, q w ) normája 1-gyel egyenlő (n(ˆq) = 1) ˆq megadható ˆq = (sin φu q, cos φ) = sin φ u q + cos φ u q egy három-dimenziós vektor u q = 1 n(ˆq) = n(sin φu q, cos φ) = sin 2 φ(u q u q ) + cos 2 φ = sin 2 φ + cos 2 φ = 1 akkor és csak akkor, ha u q u q = 1 = u q 2 64 / 84

Kvaterniók Műveletek egységkvaterniókon Komplex számok esetén Egy két dimenziós egység vektor megadható cos φ + i sin φ = e iφ formában Alkalmazható kvaterniók esetén is ˆq = sin φ u q + cos φ = e φuq A logaritmus és hatvány függvények ezek alapján Logaritmus: log ˆq = log(e φuq ) = φu q Hatvány: ˆq t = (e φuq ) t = e φtuq = sin(φt) u q + cos(φt) 65 / 84

Kvaterniók Kvaternió-transzformáció Egység hosszú kvaterniók (egységkvaterniók) tanulmányozása Az egységkvaterniók egy három dimenziós forgatást fejezhetnek ki Egy pont vagy egy vektor négy koordinátáját p = (p x, p y, p z, p w ) T helyezzük el egy ˆp kvaternió komponenseibe Tfh. van egy egységkvaterniónk ˆq = (sin φ u q, cos φ) Ekkor ˆqˆpˆq 1 ˆp-t forgatja el (és így p-t is) az u q-tengely körül 2φ szöggel Ezt a forgatást bármely tengely körüli forgatás esetén használhatjuk ˆq és ˆq 1 ugyanazt a forgatást hajtja végre Egy mátrixból való kvaternió kinyerése akár ˆq-val vagy ˆq-val is visszatérhet 66 / 84

Kvaterniók Összetett kvaternió-transzformáció Adott ˆq és ˆr két egységkvaternió Két kvaternióval ˆp-n végrehajtott összetett transzformáció ˆr(ˆqˆpˆq )ˆr = (ˆrˆq)ˆp(ˆrˆq) = ĉˆpĉ ahol ĉ = ˆrˆq szintén egy egységkvaternió, amelyet ˆq és ˆr kvaterniók összefűzésével kapunk meg 67 / 84

Kvaterniók Mátrix átalakítás A mátrixszorzás egyes rendszerekben hardveresen támogatott Hatékonyabb ilyen módon elvégezni a szorzásokat, mint az előzőekben megadott formában Szükség van a kvaterniók mátrix formába való átalakítása mindkét irányba 68 / 84

Kvaterniók Mátrix átalakítás Egy ˆq kvaternió az M q mátrixba a következőképpen alakítható át 1 s(qy 2 + qz 2 ) s(q x q y q w q z ) s(q x q z + q w q y ) 0 M q = s(q x q y + q w q z ) 1 s(qx 2 + qz 2 ) s(q y q z q w q x ) 0 s(q x q z q w q y ) s(q y q z + q w q x ) 1 s(qx 2 + qy 2 ) 0, 0 0 0 1 ahol s = 2/n(ˆq) Egységkvaterniók esetén ez a következőképpen egyszerűsödik: 1 2(qy 2 + qz 2 ) 2(q x q y q w q z ) 2(q x q z + q w q y ) 0 M q = 2(q x q y + q w q z ) 1 s(qx 2 + qz 2 ) 2(q y q z q w q x ) 0 2(q x q z q w q y ) 2(q y q z + q w q x ) 1 2(qx 2 + qy 2 ) 0 0 0 0 1 Nincs szükség trigonometrikus függvények használatára 69 / 84

Kvaterniók Mátrix átalakítás Fordított irányú átalakítás egy kicsit bonyolultabb Mátrix elemekből előállított különbségek m q 21 mq 12 = 4q w q x, m q 02 mq 20 = 4q w q y, m q 10 mq 01 = 4q w q z. Ha q w -t ismerjük, akkor a v q és így ˆq kiszámítható 70 / 84

Kvaterniók Mátrix átalakítás A mátrix nyoma tr(m q ) = 4 2s(q 2 x + q 2 y + q 2 z ) = 4 ( 1 q2 x + q 2 y + q 2 z q 2 x + q 2 y + q 2 z + q 2 w ) = 4q 2 w q 2 x + q 2 y + q 2 z + q 2 w = 4q2 w n(ˆq) Ebből következik q w = 1 2 tr(m q ) q x = mq 21 mq 12 4q w q y = mq 02 mq 20 4q w q z = mq 10 mq 01 4q w 71 / 84

Kvaterniók Mátrix átalakítás Numerikusan stabil eljárás Kis számokkal való osztások elkerülése Legyen t = q w 2 q 2 x q 2 y q 2 z m 00 = t + 2q 2 x, m 11 = t + 2q 2 y, m 22 = t + 2q 2 z, u = m 00 + m 11 + m 22 = t + 2q 2 w, Melyik a legnagyobb a q x, q y, q z és q w közül m 00, m 11, m 22 és u alapján meghatározhatjuk q w esetén előző fólia 72 / 84

Kvaterniók Mátrix átalakítás Ellenkező esetben 4qx 2 = +m 00 m 11 m 22 + m 33 4qy 2 = m 00 + m 11 m 22 + m 33 4qz 2 = m 00 m 11 + m 22 + m 33 4qw 2 = tr(m q ). Mátrix elemekből előállított különbségek segítségével a maradék ˆq komponenseket is meg lehet határozni 73 / 84

Kvaterniók Gömbi lineáris interpoláció Olyan művelet, amelyet ˆq és ˆr egységkvaternió és egy t [0, 1] paraméter esetén egy interpolált kvaterniót számít ki Hasznos objektumok animálásánál Kevésbé hasznos kamera irányítottságok interpolálásakor A kamera felfele mutató vektor megdőlhet az interpolálás alatt Algebrai formája egy ŝ összetett kvaternió ŝ(ˆq,ˆr, t) = (ˆrˆq 1 ) t ˆq Szoftveres megvalósításkor ŝ(ˆq,ˆr, t) = slerp(ˆq,ˆr, t) = sin(φ(q t)) sin φt sin φ ˆq + sin φ ˆr 74 / 84

Kvaterniók Gömbi lineáris interpoláció φ kiszámításához cos φ = q x r x + q y r y + q z r z + q w r w összefüggést használjuk fel t [0, 1] -re a slerp függvény egyedi interpolált kvaterniókat számít ki amelyek együtt a legrövidebb ívet alkotják egy négydimenziós egységgömbön ˆq(t = 0)-tól ˆr(t = 1)-ig Az ív a körön helyezkedik el A ˆq, ˆr és az origó által meghatározott sík és a négy dimenziós egységgömb metszeteként alakul ki 75 / 84

Kvaterniók Gömbi lineáris interpoláció A slerp függvény tökéletesen alkalmas két orientáció/irányítottság közötti interpolációra Euler transzformációval elvégezni nem olyan egyszerű Több Euler szög interpolálásakor gimbal lock állhat elő Kettőnél több orientáció esetén ˆq 0, ˆq 1,..., ˆq n 1 Amennyiben a slerp függvényt alkalmazzuk minden szakaszon, akkor hirtelen irányváltás látható az orientáció interpolálásakor 76 / 84

Kvaterniók Gömbi lineáris interpoláció Valamilyen spline-t kell használunk interpoláláskor Vezessük be â i és ˆb i+1 kvaterniókat ˆq i és ˆq i+1 között Interpoláció során áthaladunk a kezdeti q i, i [0, ˆ..., n 1] orientációkon, de az â i -ken nem Arra használjuk, hogy jelezzük az érintőleges irányítottságokat az eredeti orientációknál [ ] â i = ˆb i = ˆq i exp log(ˆq 1 i ˆq i 1 ) + log(ˆq 1 i ˆq i+1 ) 4 A ˆq i -t, â i -t és ˆb i -t a kvaterniók gömbi interpolációjára használjuk sima köbös spline használatával a következő egyenlet szerint squad(ˆq i, ˆq i+1, â i, â i+1, t) = slerp(slerp(ˆq i, ˆq i+1, t),slerp(â i, â i+1, t), 2t(1 t)) 77 / 84

Kvaterniók Egy vektor forgatása egy másikba Egy s irányvektort egy t irányvektorba forgatunk Normalizáljuk s-t és t-t Kiszámítjuk az u egység forgatási tengelyt u = (s t)/ s t egyenlőség alapján Legyen e = a t = cos(2φ) és s t = sin(2φ) ahol 2φ az s és t közötti szög ˆq = (u sin φ, cos φ) Az adott forgatást hajtja végre s-ből t-be ˆq = ( sin φ sin 2φ )-t (s t), cos φ egyszerűsítve ( ) 1 2(1 + e) ˆq = (q v, q w ) = (s t), 2(1 + e) 2 A numerikus instabilitást elkerülhetjük Nullával való osztás Ellentétes irányú t és s Bármely s-re merőleges forgatási tengely használható t forgatására 78 / 84

Kvaterniók Egy vektor forgatása egy másikba s-ből r-be való forgatásmátrix ábrázolása e + hvx 2 hv x v y v z hv x v z + v y 0 hv R(s, t) = x v y + v z e + hv 2 y hv y v z v x 0 hv x v z v y hv y v z + v x e + hvz 2 0 0 0 0 1 v = s t, e = cos(2φ) = s t, h = 1 cos 2φ sin 2 (2φ) = 1 e v v = 1 1 + e. 79 / 84

Vertex keveredés Egy digitális karakter animálásakor az alkarját és felkarját mozgatjuk Merevtest-transzformáció Nem hasonlít a két rész kapcsolódása a könyökre Csontokat definiálnak Bőr vesz körül és a bőr a csontok mozgásának megfelelően változik Az al- és a felkart elkülönülve animáljuk A két rész kapcsolódásánál egy rugalmas bőrrel kapcsoljuk össze a részeket Merevtest-transzformáció Hajlat (2/3,1/3) Csontok (1/3,2/3) Vertex keveredés 80 / 84

Vertex keveredés A rugalmas rész egy vertex halmazát a felkar A másik vertex halmazt az alkar mátrixszal transzformáljuk Azok a háromszögek, amelyek vertexeit különböző mátrixokkal transzformáltuk, a transzformáció következtében megnyúlnak illetve összemennek 81 / 84

Vertex keveredés Megengedhetjük egy egyszerű vertex esetén Több különböző mátrixszal transzformáljuk Az eredményeket súlyozzuk és keverjük u(t) = n 1 i=0 w ib i (t)m 1 i p, ahol n 1 i=0 w i = 1, w i 0 p az eredeti vertex u(t) transzformált vertex M i mátrix az iniciális koordinátarendszerből a világ koordináta-rendszerbe transzformál B i (t) az i-ik csont világ transzformációja w i az i-ik csont súlya a p vertex esetén 82 / 84

Vertex keveredés Az M i mátrix inverze modelltérből a csont saját terébe transzformál A B i (t) csont aktuális transzformációjával vissza a modelltérbe transzformál A gyakorlatban a B i (t) és az M 1 i mátrixokat összefűzzük Mindegyik csont és az animáció mindegyik képkockája esetén Az eredménymátrixot használjuk a vertex transzformáció végrehajtására 83 / 84

Összefoglalás Miről volt szó? Transzformációs csővezeték Speciális transzformációk Euler transzformáció Paraméterek kinyerése az Euler transzformációból Mátrix felbontás Forgatás tetszőleges tengely mentén Kvaterniók Vertex keveredés 84 / 84