Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
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
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
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
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
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
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)
0°
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
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
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
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
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
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
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
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
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
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
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