Come rappresento Reppresentazioni possibili per le ...

16
Marco Tarini - Game Engines 04/06/2016 Master Game Dev 2016 - Univ Verona 1 Come rappresento le trasformazioni Per esempio, con una matr 4x4: class Transform { // fields: Mat4x4 m; // methods: Vec4 apply( Vec4 p ); // p in coord omogenee Vec3 applyToPoint( Vec3 p ); // p in coord cartes. Vec3 applyToVector( Vec3 v ); // p in coord cartes. } 03-06-2016 Marco Tarini - Master Game Dev Come rappresento le trasformazioni Oppure, per es, con matr3x3 + vett traslazione: class Transform { // fields: Mat3x3 m; // rotaz, skew, scale Vec3 t; // translaz // methods: Vec3 applyToPoint( Vec3 p ){ return m * p + t; } Vec3 applyToVector( Vec3 v ){ return m * p; } } 03-06-2016 Marco Tarini - Master Game Dev Reppresentazioni possibili per trasformazioni: criteri Buone (o meno) per: compattezza quanto sono prolisse in memoria? facilità di applicazione quanto è oneroso applicare ad uno (o ventimila) punti / vettori? interpolabilità è possibile/facile trovare un’inerpolazione fra N trasformaz date? quanto è “buono” il risultato combinabilità è facile trovare la risultante di N trasformaz date, eseguite in successione? invertibilità è facile trovare la trasformaz inversa? intuitività quanto è difficile spiegarla ai modellatori / editori di scene / etc 03-06-2016 Marco Tarini - Master Game Dev Perché è utile interpolare trasformaz: esempio: animazioni tempo 100 tempo 200 tempo 150 T 1 T 2 T i ? 03-06-2016 Marco Tarini - Master Game Dev

Transcript of Come rappresento Reppresentazioni possibili per le ...

Page 1: Come rappresento Reppresentazioni possibili per le ...

Marco Tarini - Game Engines 04/06/2016

Master Game Dev 2016 - Univ Verona 1

Come rappresentole trasformazioni

� Per esempio, con una matr 4x4:

class Transform {

// fields:

Mat4x4 m;

// methods:

Vec4 apply( Vec4 p ); // p in coord omogenee

Vec3 applyToPoint( Vec3 p ); // p in coord cartes.

Vec3 applyToVector( Vec3 v ); // p in coord cartes.

}

03-06-2016 Marco Tarini - Master Game Dev

Come rappresentole trasformazioni

� Oppure, per es, con matr3x3 + vett traslazione:

class Transform {

// fields:

Mat3x3 m; // rotaz, skew, scale

Vec3 t; // translaz

// methods:

Vec3 applyToPoint( Vec3 p ){

return m * p + t;

}

Vec3 applyToVector( Vec3 v ){

return m * p;

}

}03-06-2016 Marco Tarini - Master Game Dev

Reppresentazioni possibili per trasformazioni: criteri

� Buone (o meno) per:� compattezza

� quanto sono prolisse in memoria?

� facilità di applicazione� quanto è oneroso applicare ad uno (o ventimila) punti / vettori?

� interpolabilità� è possibile/facile trovare un’inerpolazione fra N trasformaz date?

� quanto è “buono” il risultato

� combinabilità� è facile trovare la risultante di N trasformaz date,

eseguite in successione?

� invertibilità� è facile trovare la trasformaz inversa?

� intuitività� quanto è difficile spiegarla ai modellatori / editori di scene / etc

03-06-2016 Marco Tarini - Master Game Dev

Perché è utile interpolare trasformaz:

esempio: animazioni

tempo 100

tempo 200

tempo 150

T1

T2

Ti ?

03-06-2016 Marco Tarini - Master Game Dev

Page 2: Come rappresento Reppresentazioni possibili per le ...

Marco Tarini - Game Engines 04/06/2016

Master Game Dev 2016 - Univ Verona 2

Perché è utile cumulare trasformaz:

esempio: scenegraph

spaziomondo(globale)

spazio oggettoruota 1

spazio oggettoautomobile

03-06-2016 Marco Tarini - Master Game Dev

Perché è utile cumulare trasformaz:

esempio: scenegraph

Tc T0

T1T2

T3T4 T5 T6

“T3

seguito da

T0 ”

NOTA:cumulazione di trasf.NON commuta!!!

03-06-2016 Marco Tarini - Master Game Dev

Perché è utile invertire trasformaz:

switch between spaces

T

T

-1

spazio mondo spazio oggetto A

03-06-2016 Marco Tarini - Master Game Dev

Come rappresentole trasformazioni

� Quindi servono metodi come:

class Transform {

// fields:

// methods:

Vec3 applyToPoint( Vec3 p );

Vec3 applyToVector( Vec3 v );

Transform cumulateWith( Transform& t );

Transform inverse();

Transform interpolateWith( Transform& t , float k );

}

Sinonimi comuni al posto di interpolate:blend, mix, lerp

03-06-2016 Marco Tarini - Master Game Dev

Page 3: Come rappresento Reppresentazioni possibili per le ...

Marco Tarini - Game Engines 04/06/2016

Master Game Dev 2016 - Univ Verona 3

Classi utilidi trasformazioni spaziali

� Isometrie (rototraslazioni)

� “Mantengono le distanze”

� Rotaz + Traslaz

� Similitudini (trasformaz. conformali)

� “Mantengono gli angoli”

� Rotaz + Traslaz + Scaling uniforme

� Lineari (trasformaz. affini)

03-06-2016 Marco Tarini - Master Game Dev

Un’altra classe di trasf (senza nome)

spesso usata nei Game Engines

� Le trasformazioni ottenibili combinando:� Rotazioni

� Traslazioni

� Scalature… ma anche NON uniformi

� (un altro sottoinsieme delle trasformazioni affini)

� Utile in pratica� facile da specificare, abb. flessibile e intuitiva

� Bruttina in teoria� non e’ chiusa rispetto a combinazione :-O :-(

� (e non mantiene… angoli, nulla)03-06-2016 Marco Tarini - Master Game Dev

Come rappresento le trasf. isometriche / conformali

� Sotto problema: come rappresento le rotazioni

class Transform {

// fields:

Rotation r;

float s; // scale

Vec3 t; // translation

// methods: …

}

class Rotation {

// fields:

Mat3x3 m;

// methods: …

}

Non necessariamentecosi’!

stiamo per vederevalide alternative

03-06-2016 Marco Tarini - Master Game Dev

Osservazione

� se la mia trasformazione è rappresentata da

� rotazione

� + traslazione

� + (eventualmente) scalatura

� allora la posso agevolmente

� applicare (a punti e vettori)

� cumulare (con altre trasformazioni)

� invertire

� interpolare

� a patto di saperlo fare con le rotazioni !03-06-2016 Marco Tarini - Master Game Dev

Page 4: Come rappresento Reppresentazioni possibili per le ...

Marco Tarini - Game Engines 04/06/2016

Master Game Dev 2016 - Univ Verona 4

Osservazione

� Esempio: applicazione a punti e vettori

class Transform {

// fields:

Rotation r;

Vec3 t; // translation

Transform applyToPoint( Vec3 p ){

return r.apply( p ) + t ;

}

Transform applyToVector( Vec3 v ){

return r.apply( v ) ;

}

}

nb: usata “a scatola chiusa”

03-06-2016 Marco Tarini - Master Game Dev

Osservazione

� Esempio: interpolare transf

class Transform {

// fields:

Rotation r;

Vec3 t; // translation

Transform mixWith( Transform b , float k ){

Transform result;

result.r = this.r.blendWith( b.r , k );

result.t = this.t * k + b.t * (1-k);

return result;

}

}

03-06-2016 Marco Tarini - Master Game Dev

Osservazione

� Esempio: inversione

class Transform {

// fields:

Rotation r;

Vec3 t; // translation

Transform inverse(){

Transform result;

result.r = this.r.inverse();

result.t = result.r.apply( -this.t );

return result;

}

}

NB!(perchè?)

03-06-2016 Marco Tarini - Master Game Dev

Osservazione

� Esempio: cumulare trassf

class Transform {

// fields:

Rotation r;

Vec3 t; // translation

Transform cumulateWith( Transform b ){

Transform result;

result.r = this.r.cumulateWith( b.r );

result.t = b.r.apply( this.t ) + b.t;

return result;

}

}

NB!(perchè?)

03-06-2016 Marco Tarini - Master Game Dev

Page 5: Come rappresento Reppresentazioni possibili per le ...

Marco Tarini - Game Engines 04/06/2016

Master Game Dev 2016 - Univ Verona 5

Come rappresento (internamente)

una rotazione in 3D?

cioè anche gli

orientamenti

di un oggetto nello

spazio

03-06-2016 Marco Tarini - Master Game Dev

Rotazioni in R3: quante possibili?

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

RR10

R11R11

R12R12

R13R13

etc etc03-06-2016 Marco Tarini - Master Game Dev

Rotazioni in R3: quante possibili?

R0

(e ovviamente includono l’identità)

03-06-2016 Marco Tarini - Master Game Dev

Per paragone:

reppresentaz. delle traslazioni in 3D

� Banale:

vettore di displacement (tre float)!

� perfetta secondo tutti i criteri(verificare!)

03-06-2016 Marco Tarini - Master Game Dev

Page 6: Come rappresento Reppresentazioni possibili per le ...

Marco Tarini - Game Engines 04/06/2016

Master Game Dev 2016 - Univ Verona 6

Per paragone:

reppr. delle rotazioni in 2D

� Banale: un angolo (un float)

� buona secondo tutti i criteri(verificare per esercizio!)

� (unica scelta: degrees or radiants?)

� caveat: interpolazione!«pick the shortest route»

mix( 25°, 335° , 0.5 ) = 0(ma, still easy)

[0,360) [0,2·Pi)

25°

335° = -25°

03-06-2016 Marco Tarini - Master Game Dev

Per paragone:

reppr. delle rotazioni in 2D

� Passaggio angolo � vettore

x

y

α

03-06-2016 Marco Tarini - Master Game Dev

Per paragone:

reppr. delle rotazioni in 2D

� Passaggio angolo vettore

x

y

α

pro tip: use atan2

03-06-2016 Marco Tarini - Master Game Dev

Reppresentazioniper rotazioni (in 3D)

� Molte possibili,

vanno più o meno bene coi vari criteri

� Tutte molto diffuse ed usate

� Modi per passare da una rappr. all’altra?

03-06-2016 Marco Tarini - Master Game Dev

Page 7: Come rappresento Reppresentazioni possibili per le ...

Marco Tarini - Game Engines 04/06/2016

Master Game Dev 2016 - Univ Verona 7

Reppresentazioni principali delle rotazioni

�Matrici 3x3

�quello tipic. usato durante ilrendering (nella GPU)

03-06-2016 Marco Tarini - Master Game Dev

Modo 1: matrice 3x3 (9 floats)

� dopotutto, una rot è un caso di trasf affine

� (sottomatrice 3x3 della matrice di trasf 4x4)

� come sappiamo, R ortonormale con det = 1

R00010 0 0

03-06-2016 Marco Tarini - Master Game Dev

Modo 1: matrice 3x3 (9 floats)

� Prolissa (9 numeri invece di 3)

� Facile da applicare (molt matrice-vettore)� come sappiamo, cumulabile con qualunque altra trasf. affine

� Abb. facile da cumulare (molt matrice-matrice)

� Facilissima da invertire (trasposiz matrice)

� Problematica da interpolare:

R0k + (1-k) R1

= Min genere NONdi rotazione(non ortonormale)

perché?

03-06-2016 Marco Tarini - Master Game Dev

Modo 1: matrice 3x3 (9 floats)

� Molto efficiente da applicare� prodotti e somme, no trigonometria

� Piu’ traslazione: matrice 4x4 (o 3x4)� cumulabile con tutte le altre trasf affini!

� � metodo tipic. adottato per memorizzare ed eseguiretrasformazioni spazialinel GPU-based rendering!(nel vertex shader)

03-06-2016 Marco Tarini - Master Game Dev

Page 8: Come rappresento Reppresentazioni possibili per le ...

Marco Tarini - Game Engines 04/06/2016

Master Game Dev 2016 - Univ Verona 8

Reppresentazioni principali delle rotazioni

�Matrici 3x3

�Angoli di Eulero� il più intuitivo dei metodi

per specificare a mano una rot

�e.g. ben compreso anche

da artisti digitali

03-06-2016 Marco Tarini - Master Game Dev

Modo 2: angoli di eulero (3 floats)

� Qualunque rotazione

può essere espressa come:

� rotazione lungo asse X (di α gradi), seguita da:

� rotazione lungo asse Y (di β gradi), seguita da:

� rotazione lungo asse Z (di γ gradi):

� Angoli α β γ :

“angoli di Eulero” di quella rotazione

� (quindi: le “coordinate” di quella rotaz)

oridine (X-Y-Z)

arbitrariamente

scelto,(ma 1 volta x

tutte)03-06-2016 Marco Tarini - Master Game Dev

Modo 2: angoli di eulero (3 floats)

� In linguaggio nautico / areonautico:

angoli di “rollio, beccheggio, imbardata”

rollio(roll )

beccheggio (pitch )

imbardata (yaw )03-06-2016 Marco Tarini - Master Game Dev

Modo 2: angoli di eulero (3 floats)

� Implementaz.

fisica:

“mappamondo

a tre assi”

03-06-2016 Marco Tarini - Master Game Dev

Page 9: Come rappresento Reppresentazioni possibili per le ...

Marco Tarini - Game Engines 04/06/2016

Master Game Dev 2016 - Univ Verona 9

Modo 2: angoli di eulero (3 floats)

� Univoco ? 1:1 ?

� 1 rotaz � 1 terna di angoli di Eulero ?

� Quasi

� (limintandooppurtunamente gli angoli).

� Brutta eccezione:

“GIMBAL LOCK”

� quando 1 rotazionefa coincidere gli assidelle altre 2

� (è inevitabile che possaaccadere)

03-06-2016 Marco Tarini - Master Game Dev

Modo 2: angoli di eulero (3 floats)

� Compattezza: perfect!

� Da applicare: un po’ faticoso

� (tre rotazioni in fila)

� Da interpolare: possibile…

� intrerpolaz dei tre angoli

� (occhio ad interpolare angoli: ricordarsi equivalenza angoli: α = α +360 (k) )

…ma risultati non sempre intuitivi)

� Da cumulare / invertire: problematico…

perché sommare / ribaltare gli angoli non funziona?

03-06-2016 Marco Tarini - Master Game Dev

da: angoli di eulero a: matrice 3x3

� Facile!

� Il viceversa?

� (solo a suon di conti e funz trigon. inverse)

03-06-2016 Marco Tarini - Master Game Dev

Recap: rappresentaz. di rotaz.1/2 3x3 Matrix Euler Angles

Space efficient?(in RAM, GPU, storage…)

Apply(to points/vectors)

Invert(produce inverse)

Cumulate (with another rotation)

Interpolate(with another rotation)

Intuitive?(e.g. to manually set)

Notes…Free

skew + scale!

easy to do…

unintuitive result

trigonometry

sin/cos

?!?

9 products

(3 dot products)

just transpose

9 scalars 3 scalars(even small int!)

rollio &beccheggio &imbardata

matrix

multiplication(9 dots)

GIMBAL LOCK

E f

fic i

e n

t /

e a

s y

t

o

03-06-2016 Marco Tarini - Master Game Dev

Page 10: Come rappresento Reppresentazioni possibili per le ...

Marco Tarini - Game Engines 04/06/2016

Master Game Dev 2016 - Univ Verona 10

Reppresentazioni principali delle rotazioni

�Matrici 3x3

�Angoli di Eulero

�Asse + angolo� il metodo comunemente usato

per es in fisica

03-06-2016 Marco Tarini - Master Game Dev

Modo 3: asse e angolo

� Qualunque rotazione data

può essere espressa come:

� una rotazione di un angoloattorno ad un asse

� Angolo: uno scalare (1 float)

� Asse: un vettore unitario (3 float)

� passante per l’origine

opportunamente scelti

03-06-2016 Marco Tarini - Master Game Dev

Modo 3: asse e angolo

� Compattezza:

abb buono: 4 float

� Efficienza di applicazione: maluccio �

� modo migliore: passare a matrice 3x3 (come?)(o a quaternione: vedi poi)

� Invertire: facilissimo

� (ribaltare angolo oppure asse)

� nota: se si invertono entrambi?

stessa rotazione!

03-06-2016 Marco Tarini - Master Game Dev

Modo 3: asse e angolo

� Nota:

(ax, ay, az, alpha)

(-ax, -ay, -az, -alpha)

sono la stessa rotazione!

� � Ogni rotazione ha

due rappresentaz equivalenti

come asse e angolo!

� (eccetto l’identità, che ne ha infinite:alpha = 0, asse qualunque)03-06-2016 Marco Tarini - Master Game Dev

Page 11: Come rappresento Reppresentazioni possibili per le ...

Marco Tarini - Game Engines 04/06/2016

Master Game Dev 2016 - Univ Verona 11

Modo 3: asse e angolo

� Cumulare: nient’affatto immediato �

� Interpolare: ottimo!� idea: interpolare asse, intrerpolare angolo� Alcuni semplici caveat:

� 1) bisogna prima flippare uno dei due (asse,angolo)se questo avvicina i due assi fra loro

� 2) angolo va interpolato… «modulo 360°» (again!)

� 3) l’asse va rinormalizzato post interpolaz� 4) occhio ai casi degeneri (assi opposti)

� best results! la rotazione giusta� eccetto la velocità di rotaz

03-06-2016 Marco Tarini - Master Game Dev

Modo 3: asse e angolo: variante

� asse: v (vett normale, |v | = 1)

� angolo: α (scalare)

� rappresentarli internamente come 1 solo vett: v’ (3 float in tutto)

v’ = α v� angolo α = |v’ |

� asse v = v’ / |v’ |

� (nota: se angolo = 0, asse si perde… infatti non conta)

� Più coinciso, ma per il resto equivalente� anzi, meglio: una sola rappresentaz per ogni rotaz (perchè?)

… anche per l’identità (perchè?)03-06-2016 Marco Tarini - Master Game Dev

da: asse e angoloa: matrice 3x3

� esercizio!

03-06-2016 Marco Tarini - Master Game Dev

Reppresentazioni principali delle rotazioni

�Matrici 3x3

�Angoli di Eulero

�Asse + angolo

�Quaternioni

03-06-2016 Marco Tarini - Master Game Dev

Page 12: Come rappresento Reppresentazioni possibili per le ...

Marco Tarini - Game Engines 04/06/2016

Master Game Dev 2016 - Univ Verona 12

Ripasso: numeri complessi

� Conseguenze:� “Num complesso”: (a + b i )

� interpretaz geom: punti 2D (a , b)

� Moltiplicaz fra complessi: …� interpretaz geom: …

� Dunque:� moltiplicare per ruotare in 2D

numero complesso � (attorno(a norma 1) all’origine)

� numeri complessi � rappresentaz(a norma 1) rotazioni in 2D

Assunzione“fantasiosa”:

c’è un � t.c.

�� � �1

03-06-2016 Marco Tarini - Master Game Dev

Passare ai quaternioni

� Conseguenze:� “Quaternione”: ( a i + b j + c k + d )

� interpr. geom: punti 3D (a,b,c), quando d=0

� Molitplicare due quat: …

� Invertire un quat: …

� Coniungare due quat q e p (fare q p q ): …� interpretaz geom: ruotare p

con la rotaz def da q

� Dunque:� coniugare con un � ruotare in 3D

quat (con norma 1) (asse pass. x ori)

� quaternioni � rappresentaz(a norma 1) rotazioni in 3D

-

Assunzione“fantasiosa”:

ci sono �, �, t.c.

cioè:

i2 = j2 = k2 = -1

ij = k ji = -k

jk = i kj = -i

ki = j ik = -j

x i j k

i -1 +k -j

j -k -1 +i

k +j -i -1

03-06-2016 Marco Tarini - Master Game Dev

Da asse+angoloa quaternione

� rotaz: di α attorno all’asse (ax , ay , az )

� quaternione:

q = s ax i + s ay j + s az k + c con

c = cos( α / 2 )s = sin ( α / 2 )

� cioè q = ( s ax , s ay , s az , c )

� nota: || q || = 1

vett. unitario

verificare!03-06-2016 Marco Tarini - Master Game Dev

Modo 4: “quaternioni” (4 float)

� Applicazione: facillimo ;)

� ruotare p = x i+y j+z k

p ruotato = q · p · q

� 2 moltiplicaz quat.

� Cumulare: facillimo ;)

� 1 moltiplicaz quat

� Invertire: facillimo ;)

� flippare la parte reale oppure quella immaginaria

� se entrambe: rimane la stessa rotaz!

quat che rappresenta il puntodi coord ( x , y , z )

Nota: parte reale = 0

03-06-2016 Marco Tarini - Master Game Dev

Page 13: Come rappresento Reppresentazioni possibili per le ...

Marco Tarini - Game Engines 04/06/2016

Master Game Dev 2016 - Univ Verona 13

Modo 4: “quaternioni” (4 float)

� Interpolare: facillimo ;) …e good results!

� simili caveats di asse e angolo:

� 1) flippare un quaternione prima,

se accorcia la distanza fra i due

� 2) ri-normalizzare il quaternione dopo

� velocità: non corretta

� c’è modo di correggerla

03-06-2016 Marco Tarini - Master Game Dev

Recap: rappresentaz. di rotaz.2/2 axis + angle (unitary) quaternion

Space efficient?(in RAM, GPU, storage…)

Apply(to points/vectors)

Invert(produce inverse)

Cumulate (with another rotation)

Interpolate(with another rotation)

Intuitive?(e.g. to manually set)

Notes… two representations for each rotation(flip all � no effect) (for different reasons)

sometimes

to matrix?+ trigonometry

4 scalars (or 3)(but precision needed)

E f

fic i

e n

t /

e a

s y

t

o

easy(best results!)

not really

super easyflip di parte reale o imm.

super easy:1 prodotto quat

easy:2 prodotti quat

super easyflip di asse o angolo

easy + good result (except speed)

4 scalars (but precision needed)

03-06-2016 Marco Tarini - Master Game Dev

And the winner is…

� Ovviamente, i quaternioni

� perché sono più efficienti su tutte le op

� Ovviamente, gli angoli di Eulero

� perché sono più intuitivi (e pure più compatti)

� Ovviamente, asse+angolo

� perché hanno l’interpolazione più naturale(in molti casi, speed giusta di default)

� Ovviamente, le matrici 3x3

� perché sono lo standard in CG

� perché esprimono non solo rot ma qualsiasi affine(eccetto la traslaz, che tanto è storata separatamente)

03-06-2016 Marco Tarini - Master Game Dev

Switching betweenrepresentations

3x3MATRIX

AXIS+

ANGLE

EULERANGLES

QUATER-NION

rather trivial(I expect you

to be able to!)

interestingexercise(try it, maybe)

03-06-2016 Marco Tarini - Master Game Dev

Page 14: Come rappresento Reppresentazioni possibili per le ...

Marco Tarini - Game Engines 04/06/2016

Master Game Dev 2016 - Univ Verona 14

GUI: come specificaun utente le rotazioni in 3D?

� Metodo ricorrente: rotation gizmo

� (a volte: «arcball» o «trackball»)

� tre handles per controllare i tre angoli di Eulero

� o “free”, drag-n-drop “intuitivo” (metafora trackball)

convenzione: Rosso = X Verde = Y Blu = Z

03-06-2016 Marco Tarini - Master Game Dev

GUI: come specificaun untente le traslazioni in 3D?

� “free”: drag-and-drop 2D in spazio immagine,

� mantendo distanza da osservatore

oppure

� translation gizmo

� orientato nello spazio mondo, oppure

� orientato nello spazio oggetto

� handles per trasl lungo assi e/o piani

es: x spostare

un oggetto

“in basso”

es: x spostare

un oggetto

lungo il

“suo” basso

es: x spostare

un oggetto

“qui, in questo

punto dello

schermo”

convenzione: Rosso = X Verde = Y Blu = Z

03-06-2016 Marco Tarini - Master Game Dev

GUI: come specificaun untente le scalature in 3D?

� scaling gizmo

� (tipic. orientato in spazio oggetto)

� tre handles per le scalature anisotropichje+ un handle centrale per scalature uniformi

convenzione: Rosso = X Verde = Y Blu = Z

03-06-2016 Marco Tarini - Master Game Dev

Rotazioni in unity

� Nella GUI del game tools:

� Euler Angles

� Internamente:

� Quaternions

� Nell’interfaccia degli scripts:

� a scelta, (quat, euler, axis+angle…)

con metodi setter/getter

03-06-2016 Marco Tarini - Master Game Dev

Page 15: Come rappresento Reppresentazioni possibili per le ...

Marco Tarini - Game Engines 04/06/2016

Master Game Dev 2016 - Univ Verona 15

Trasformazioni in Unity

� Lineari (trasformaz. affini)

� Similitudini (trasformaz. conformali)

� “Mantengono gli angoli”

� Rotaz + Traslaz + Scaling uniforme

� Isometrie (rototraslazione)

� “Mantengono la magnitudine”

� Rotaz + Traslaz

anisotropico

class

Transform

03-06-2016 Marco Tarini - Master Game Dev

Rotazioni in OpenGL

� Nelle API «old school»: glRotate3f

� Asse e angolo

� Internamente:

� Matrici

� (come tutte le altre trasformazioni spaziali)

03-06-2016 Marco Tarini - Master Game Dev

Reppresentarerotazioni

�Matrici 3x3

�Angoli di Eulero

�Asse + angolo

�Quaternioni

+ Traslazione(displ. vec)

�Matrici 4x4 (o 3x4)

�Dual Quaternions

roto-traslazioni

03-06-2016 Marco Tarini - Master Game Dev

Promemoria domande che ci siamo posti alla lavagna

� Quale quaternione rappresenta:

� la rotazione di 0 gradi (qualunque asse)?

� la rotazione di 180 gradi attorno all’asse delle X?

� quali angoli di eulero?

� quale matrice 3x3?

� idem, per rotaz di 90 gradi, asse delle Y

� Verificare che coningando tali quaternioni con

xi+yj+zk si ottengono i risultati attesi

� rotaz del punto/vettore (x,y,z)03-06-2016 Marco Tarini - Master Game Dev

Page 16: Come rappresento Reppresentazioni possibili per le ...

Marco Tarini - Game Engines 04/06/2016

Master Game Dev 2016 - Univ Verona 16

Promemoria domande che ci siamo posti alla lavagna

� Dato un quaternione che ruota di un certo

asse e un certo angolo, cosa succede se:

� flip di asse O di angolo

� flip di asse E di angolo

� angolo = angolo + 2 Pi

� Applica ai quaternioni visti nei punti sopra

� (compreso l’ide)

(2 Pi) radianti,o 360°

03-06-2016 Marco Tarini - Master Game Dev

Promemoria domande che ci siamo posti alla lavagna

mondo

B

EF

G

T0 T1T2

T3

T4

T5

T6

DC

H

L

T7

03-06-2016 Marco Tarini - Master Game Dev

Promemoria domande che ci siamo posti alla lavagna

� Quale è la trasformaz globale del nodo L?

� Se rendo il nodo L figlio del nodo D (non più del suo attuale padre), come devo modificare la sua trasf locale, affinchè non muti la sua posizione globale (in spazio mondo)?

� Modifico la trasf locale associata al nodo L (T7) moltiplicandola con una nuova trasf Tu, es una traslazione (magari dettata da un edit di uno scener).

� cioè T7 � T7 * Tu

� cosa succede? L trasla di Tu, con la traslaz espressa nel frame

locale di L (nello spazio oggetto di L)

� Come devo modificare T7 affinchè la trasformazione Tuavvenga invece nel frame globale (in spazio mondo)?

� T7 � …?03-06-2016 Marco Tarini - Master Game Dev