3 D transformacije in gledanje Premikanje predmeta translacija

  • Slides: 63
Download presentation
3 D transformacije in gledanje

3 D transformacije in gledanje

Premikanje predmeta - translacija

Premikanje predmeta - translacija

Vrtenje – rotacija okrog središča

Vrtenje – rotacija okrog središča

Vrtenje – rotacija okrog tečaja

Vrtenje – rotacija okrog tečaja

Povečava -pomanjšanje Povečava v eni smeri Enakomerna povečava

Povečava -pomanjšanje Povečava v eni smeri Enakomerna povečava

Striženje (shear)

Striženje (shear)

Povečanje 2 D transformacij na 3 D Primer: 2 D skaliranje: [x' y' 1]

Povečanje 2 D transformacij na 3 D Primer: 2 D skaliranje: [x' y' 1] = [x y 1] * [Sx 0 0] [0 Sy 0] [0 0 1] 3 D skaliranje: [x’y’z’ 1] = [x y z 1]* [Sx 0 0 [ 0 Sy 0 [0 0 Sz [0 0 0 Narišemo samo x in y. 0] 0] 0] 1]

Transformacija točk in predmetov Homogena predstavitev

Transformacija točk in predmetov Homogena predstavitev

Osnovne 3 D afine transformacije Translacija Povečava (scalling)

Osnovne 3 D afine transformacije Translacija Povečava (scalling)

Rotacije Okoli osi x: Okoli osi y: Okoli osi z

Rotacije Okoli osi x: Okoli osi y: Okoli osi z

3 D Rotacije Okoli osi x Okoli osi y Okoli osi z Opazka: to

3 D Rotacije Okoli osi x Okoli osi y Okoli osi z Opazka: to je enako kot pri 2 D rotaciji

Sestavljanje (veriženje): Enako kot v 2 D Sestavljanje rotacij Vrstni red je pomemben 3

Sestavljanje (veriženje): Enako kot v 2 D Sestavljanje rotacij Vrstni red je pomemben 3 D matrik vrtenja ne smemo zamenjati

Še nekaj primerov 3 D transformacij Zrcaljenje preko ravnine xy Enakomerna povečava Translacija v

Še nekaj primerov 3 D transformacij Zrcaljenje preko ravnine xy Enakomerna povečava Translacija v smeri x

Splošna oblika 3 D transformacijske matrike povečava, striženje, vrtenje, zrcaljenje Translacija Perspektivna preslikava s

Splošna oblika 3 D transformacijske matrike povečava, striženje, vrtenje, zrcaljenje Translacija Perspektivna preslikava s Splošna povečava

Še več o rotacijah

Še več o rotacijah

Več o rotacijah oziroma usmeritvi usmeritev

Več o rotacijah oziroma usmeritvi usmeritev

Interpolacija O 1. 5 O 2

Interpolacija O 1. 5 O 2

Veriženje O 1 O 2

Veriženje O 1 O 2

Koti rotacije okrog fiksnih osi Y Z X Rx( 1). Ry( 2). Rz( 3).

Koti rotacije okrog fiksnih osi Y Z X Rx( 1). Ry( 2). Rz( 3). P

Predstavitev fiksnih kotov Koti, za katere zavrtimo predmet okrog fiksnih osi Usmeritve določa množica

Predstavitev fiksnih kotov Koti, za katere zavrtimo predmet okrog fiksnih osi Usmeritve določa množica 3 urejenih parametrov ki predstavljajo urejene rotacije okrog fiksnih osi: najprej okrog x, nato y nato z Več možnih zaporedij, ki ne uporabijo nujno vse 3 osi

Predstavitev fiksnih kotov Vrtenje za 10, 45, 90 bi zapisali kot – Rz(90) Ry(45),

Predstavitev fiksnih kotov Vrtenje za 10, 45, 90 bi zapisali kot – Rz(90) Ry(45), Rx(10), saj hočemo najprej rotacijo okrog, ki jo uporabimo na točki P…. Rz. Ry. Rx P Do problema pride, če se dve osi vrtenja poravnata med seboj. Temu pojavu pravimo kardanska zapora (“Gimbal Lock”)

Primeri fiksnih kotov rotacije Primer (-45, 90, 0) Primer (0, 90, 0) Y Y

Primeri fiksnih kotov rotacije Primer (-45, 90, 0) Primer (0, 90, 0) Y Y Rotacija okoli osi z X X Z Z

Primeri fiksnih kotov rotacije Na primer (0, 90, 0) Y Y X Z

Primeri fiksnih kotov rotacije Na primer (0, 90, 0) Y Y X Z

Primeri fiksnih kotov rotacije Primer (-45, 90, 0) Y Y X Z

Primeri fiksnih kotov rotacije Primer (-45, 90, 0) Y Y X Z

Kardanska zapora (gimbal lock) Poravnanje dveh ali več osi vrtenja predmeta pomeni izgubo prostostne

Kardanska zapora (gimbal lock) Poravnanje dveh ali več osi vrtenja predmeta pomeni izgubo prostostne stopnje. Predmet se ne bo vrtel tako, kot smo si zamislili.

Kardanska zapora Vrtenje za kot 90 stopinj okoli osi y v bistvu pomeni, da

Kardanska zapora Vrtenje za kot 90 stopinj okoli osi y v bistvu pomeni, da se prva os vrtenja poravna s tretjo. Inkrementalne spremembe v x, z pripeljejo do enakega rezultata: izgubimo prostostno stopnjo

Eulerjevi koti An Euler angle is a rotation about a single axis. Any orientation

Eulerjevi koti An Euler angle is a rotation about a single axis. Any orientation can be described composing three rotation around each coordinate axis. Roll, pitch and yaw

Eulerjev teorem Poljubna rotacija (ali zaporedje rotacij) okrog neke točke je ekvivalentna eni sami

Eulerjev teorem Poljubna rotacija (ali zaporedje rotacij) okrog neke točke je ekvivalentna eni sami rotaciji okrog neke osi skozi to točko. Eulerjevi koti, 1, 2, 3 Poljubno 3 D rotacijo lahko dosežemo z vrtenji okoli osi x, y in z

Rotacija točke okrog poljubne osi v 3 D Imamo podano: u = vektor enote

Rotacija točke okrog poljubne osi v 3 D Imamo podano: u = vektor enote v smeri osi vrtenja = kot vrtenja okoli u P vrtimo v Q y Q u P yz xz z x

Rotacija točke okrog poljubne osi v 3 D P vrtimo v Q y Q

Rotacija točke okrog poljubne osi v 3 D P vrtimo v Q y Q u P yz xz z xz = kot, projiciran na ravnino xz yz = kot, projiciran na ravnino yz x

Rotacija točke okrog poljubne osi v 3 D Imamo podano: u = vektor enote

Rotacija točke okrog poljubne osi v 3 D Imamo podano: u = vektor enote v smeri osi vrtenja = kot vrtenja okoli u Kjer je c cos( ) in s sin( )

Eulerjevi koti Splošna rotacija je kombinacija treh osnovnih rotacij: okoli osi x (x-roll) ,

Eulerjevi koti Splošna rotacija je kombinacija treh osnovnih rotacij: okoli osi x (x-roll) , okoli osi y (y-roll) in okoli osi z (z-roll).

Eulerjevi koti in matrike vrtenja

Eulerjevi koti in matrike vrtenja

Spet naletimo na kardansko zaporo! Rotacija za kot 90 o povzroči izgubo prostostne stopnje

Spet naletimo na kardansko zaporo! Rotacija za kot 90 o povzroči izgubo prostostne stopnje 1 x z z z /2 1 y y y x 3 1 x’ x 1 x’

Interpolacija Eulerjevih kotov nenaravno gibanje !

Interpolacija Eulerjevih kotov nenaravno gibanje !

Cilj Iščemo parametrizacijo, pri kateri – Obstaja med dvema ključnima rotacijama preprosta in neomajna

Cilj Iščemo parametrizacijo, pri kateri – Obstaja med dvema ključnima rotacijama preprosta in neomajna rotacija – Je gibanje neodvisno od izbire koordinatnega sistema

Kot in os Katerokoli usmeritev lahko podamo s četvorčkom – kot, vektor(x, y, z),

Kot in os Katerokoli usmeritev lahko podamo s četvorčkom – kot, vektor(x, y, z), pri čemer kot pove, za koliko se zavrtimo okoli osi, ki jo definira vektor Ločeno lahko interpoliramo tako kot os Ni problemov s kardansko zaporo! Ne moremo pa učinkovito sestavljati rotacij. Moramo najprej pretvoriti v matrično obliko!

Kot in os (Ax, Ay, Az, ) A Y Z X Eulerjev rotacijski teorem

Kot in os (Ax, Ay, Az, ) A Y Z X Eulerjev rotacijski teorem

Kot in os (Ax, Ay, Az, ) A 1 1 Y 2 Z A

Kot in os (Ax, Ay, Az, ) A 1 1 Y 2 Z A 2 X Eulerjev rotacijski teorem

Kvaternioni

Kvaternioni

Kvaternioni q =[s, v]=[s, x, y, z] A (cos( /2), sin( /2)*A)

Kvaternioni q =[s, v]=[s, x, y, z] A (cos( /2), sin( /2)*A)

Kvaternioni Razširjajo koncept rotacij iz 3 D na 4 D. Izognejo se problemu “kardanske

Kvaternioni Razširjajo koncept rotacij iz 3 D na 4 D. Izognejo se problemu “kardanske zapore” in omogočajo mehke in zvezne rotacije. V bistvu lahko smatramo, da dodajo še en kot vrtenja sferičnim koordinatam (na primer kotom Longitude (zemljepisna dolžina), Latitude (zemljepisna širina) in Rotation) Kvaternion je definiran s 4 realnimi števili |x y z w|. Ta izračunamo s kombinacijo treh koordinat osi vrtenja in kota vrtenja.

Kakšno zvezo imajo kvaternioni in 3 D animacija? Rešitev problema s “kardansko zaporo

Kakšno zvezo imajo kvaternioni in 3 D animacija? Rešitev problema s “kardansko zaporo" Namesto vrtenja predmeta z zaporedjem rotacij omogoča kvaternion vrtenje predmeta preko ene same poljubne osi. Ker je os vrtenja podana kot enotin vektor, lahko uporabimo vektorsko matematiko ali sferične koordinate (longitude/latitude). Interpolacija kvaternionov: mehko in napovedljivi učinki rotacije.

Motivacija Iskanje najbolj naravnega in kompaktnega načina za predstavitev rotacij in usmeritev Interpolacija usmeritve,

Motivacija Iskanje najbolj naravnega in kompaktnega načina za predstavitev rotacij in usmeritev Interpolacija usmeritve, ki vodi v naravno gibanje Zaključena matematična oblika, ki obravnava rotacije in usmeritve (razširitev kompleksnih števil)

Definicija kvaternionov Razširitev kompleksnih števil Četvorčki realnih števil – s, x, y, z ali

Definicija kvaternionov Razširitev kompleksnih števil Četvorčki realnih števil – s, x, y, z ali [s, v] – s je skalar – v je vektortor Isti podatki kot pri podajanju kota in osi, vendar v drugi obliki Lahko gledamo kot na originalno usmeritev ali kot na rotacijo nekega predmeta

Od kvaternionov k matriki vrtenja

Od kvaternionov k matriki vrtenja

Matematika s kvaternioni Točka v prostoru je podana tako: Multiplikativna identiteta Pri čemer velja

Matematika s kvaternioni Točka v prostoru je podana tako: Multiplikativna identiteta Pri čemer velja Kvaternion enotne dolžine

Lastnosti kvaternionov Konjugacija in absolutna vrednost sta podobni kot pri kompleksnih številih • Kvaternioni

Lastnosti kvaternionov Konjugacija in absolutna vrednost sta podobni kot pri kompleksnih številih • Kvaternioni niso komutativni q 1 = (s 1, v 1) q 2 = (s 2, v 2) q 1*q 2 = (s 1 s 2 – v 1. v 2 , s 1 v 2 + s 2 v 1 + v 1 x v 2) • Inverzna vrednost: • Kvaternion enote:

Rotacija s kvaternioni S pomočjo kvaternionske matematike želimo vrteti vektor v – Vektor predstavimo

Rotacija s kvaternioni S pomočjo kvaternionske matematike želimo vrteti vektor v – Vektor predstavimo kot [0, v] – Rotacijo s pomočjo kvaternionov predstavimo kot q

Rotacija s kvaternioni Rotacija P=(0, r) okrog vektorja enote n za kot θ s

Rotacija s kvaternioni Rotacija P=(0, r) okrog vektorja enote n za kot θ s pomočjo enotnega kvaterniona q=(s, v) toda q=(cos½θ, sin½θ • n) kjer je |n|=1

Rotacija s kvaternioni Veriženje rotacij – rotacija s pomočjo q 1 nato z uporabo

Rotacija s kvaternioni Veriženje rotacij – rotacija s pomočjo q 1 nato z uporabo q 2 je kot rotacija z uporabo q 2*q 1

Rotacije v praksi Rotacije najlažje izrazimo v Eulerjevih kotih ali kot pare os-kot Med

Rotacije v praksi Rotacije najlažje izrazimo v Eulerjevih kotih ali kot pare os-kot Med različnimi vrstami predstavitev lahko prehajamo (jih pretvarjamo) Izberemo tisto predstavitev, ki je za dano nalogo najbolj primerna – Vnos podatkov: Eulerjevi koti – interpolacija: kvaternioni – Sestavljanje rotacij: kvaternioni, matrika usmeritve

Dodatna gradiva, vezana na Open. GL

Dodatna gradiva, vezana na Open. GL

Trije načini uporabe transformacij Brute Force: Calculate 2 D or 3 D transformation matrices

Trije načini uporabe transformacij Brute Force: Calculate 2 D or 3 D transformation matrices then perform Q = M P and draw Q points Using gl. Matrix. Mult: Calculate 3 D transformation matrices, then gl. Matrix. Mode(GL_MODELVIEW); gl. Load. Identity(); gl. Matrix. Multd(M); gl. Matrix. Multd(N); Draw P points Using Opengl transformations: Calculate 3 D transformation matrices, then gl. Matrix. Mode(GL_MODELVIEW); gl. Load. Identity(); gl. Rotated(angle, 0, 0, 1); gl. Translated(dx, dy, dz); gl. Scaled(sx, sy, sz); Draw P points

Open. GL transformacije Transformacije Open. GL lahko izvedemo bodisi na matriki modelview ali na

Open. GL transformacije Transformacije Open. GL lahko izvedemo bodisi na matriki modelview ali na projekcijski matriki Tekočo matriko nastavimo na modelview ali na projection z naslednjim ukazom: gl. Matrix. Mode(GL_MODELVIEW) or gl. Matrix. Mode(GL_PROJECTION)

Uporaba gl. Matrix. Mult{fd}(const TYPE*M) Pri tem je Vse matrike in točke izrazimo v

Uporaba gl. Matrix. Mult{fd}(const TYPE*M) Pri tem je Vse matrike in točke izrazimo v 3 D Izračunamo vsak element transformacijske matrike in to shranimo v enodiman zionalno polje M[16] CT = CT*M Nrišemo originalne točke P

Primer • Izračunamo transformacijsko matriko M • Uporabimo Matrix. Mult za posodobitev CT •

Primer • Izračunamo transformacijsko matriko M • Uporabimo Matrix. Mult za posodobitev CT • Narišemo točke P void my. Display(void) { Point p[10], pl[4]; double M[16], M 1[16]; int i; // data p[0]. x = -1. 0; p[0]. y = 3. 0; p[0]. z = 0. 0; p[0]. r = 1; p[1]. x = -1; p[1]. y = -2; p[1]. z = 0; p[1]. r = 1; …

//transformation matrix 0 by column M[0] = cos(10*3. 14159/180); M[1] = -sin(10*3. 14159/180); M[2]

//transformation matrix 0 by column M[0] = cos(10*3. 14159/180); M[1] = -sin(10*3. 14159/180); M[2] = 0; M[3] = 0; M[4] = sin(10*3. 14159/180); M[5] = cos(10*3. 14159/180); M[6] = 0; M[7] = 0; M[8] = 0; M[9] = 0; M[10] = 1; M[11] = 0; M[12] = 0; M[13] = 0; M[14] = 0; M[15] = 1; //transformation matrix 1 by column M 1[0] = 1; M 1[1] = 0; M 1[2] = 0; M 1[3] = 0; M 1[4] = 0; M 1[5] = 1; M 1[6] = 0; M 1[7] = 0; M 1[8] = 0; M 1[9] = 0; M 1[10] = 1; M 1[11] = 0; M 1[12] = 3; M 1[13] = 2; M 1[14] = 0; M 1[15] = 1;

//draw transformed shape CT = CT(M)(M 1) gl. Color 3 f(1. 0, 0. 0,

//draw transformed shape CT = CT(M)(M 1) gl. Color 3 f(1. 0, 0. 0, 1. 0); gl. Matrix. Mode(GL_MODELVIEW); Opazka: rišemo gl. Load. Identity(); originalne točke P, ne transformiranih gl. Matrix. Multd(M); točk Q, ker je gl. Matrix. Multd(M 1); gl. Begin(GL_POLYGON); for(i=0; i<10; i++) gl. Vertex 2 d(p[i]. x, p[i]. y); gl. End(); gl. Flush(); } matrika Modelview avtomatično uporabljena na vseh P točkah

Transformacije Open. GL gl. Rotated (angle, 0, 0, 1) gl. Translated (dx, dy, dz)

Transformacije Open. GL gl. Rotated (angle, 0, 0, 1) gl. Translated (dx, dy, dz) gl. Scaled (sx, sy, sz) Naknadno množenje trenutne transformacijske matrike CT = CT*Rotate*Translate*Scale Pripelje do Q(x, y, z) = CT*Rotate*Translate*Scale*P(x, y, z) Isti vrstni red kot pri Matrix. Mult

Shranjevanje CT za kasnejšo uporabo Po več zaporednih matričnih množenjih se lahko kopičijo napake

Shranjevanje CT za kasnejšo uporabo Po več zaporednih matričnih množenjih se lahko kopičijo napake zaokrožanja Morda si želimo povratka na prejšnji CT For(I=0; I

Nastavitev kamere v Open. GL za paralelne projekcije gl. Matrix. Mode(GL_PROJECTION); gl. Load. Identity();

Nastavitev kamere v Open. GL za paralelne projekcije gl. Matrix. Mode(GL_PROJECTION); gl. Load. Identity(); gl. Ortho(left, right, bottom, top, near, far); Volumen gledanja (view volume) postavimo z definiranjem parametrov left, right, bottom, top, near, far

Pozicioniranje in usmeritev kamere gl. Matrix. Mode(GL_MODELVIEW); gl. Load. Identity(); glu. Look. At (eye.

Pozicioniranje in usmeritev kamere gl. Matrix. Mode(GL_MODELVIEW); gl. Load. Identity(); glu. Look. At (eye. x, eye. y, eye. z, look. x, look. y, look. z, up. x, up. y, up. z); To nastavimo pred uporabo transformacij.