Cours Monde3D 2017 05-Transformations
Cours Monde3D 2017 05-Transformations
Cours Monde3D 2017 05-Transformations
http://www.labri.fr/perso/pbenard/teaching/mondes3d
Les transformations mises en jeu
repère
caméra
repère
lumière
(spot)
ML
Mc
viewport pr
pe ojec
S rs tio
pe
cti n
ve
Pc
repère
scène
repère
local
Mo
repère
image
Rappels sur les Transformations
T*R*v ≠ R*T*v
x x
Transformations élémentaires
y
• Translation :
y
• Eigen :
– v' = v + t; x
– v' = Translation3f(t) * v;
– v' = Translation3f(tx,ty,tz) * v; x
• Mise à l'echelle : y
• Eigen :
– v' = s * v ;
– v' = Scaling3f(sx,sy,sz) * v x
– v' = Vector3f(sx,sy,sz).asDiagonal() * v
• Rotation :
• Eigen :
– v' = AngleAxis3f(angle,axis) * v; y y
– Matrix3f R = Matrix3f(AngleAxis3f(angle,axis)); x
– Quaternion q = AngleAxis3f(angle,axis) ;
x
Combinaison
• Affine3f M = AngleAxisf(angle1,axis1)
* Translation3f(t1)
* Scaling3f(s1)
* AngleAxisf(angle2,axis2) ;
Transformation des normales
n' = M * n correct
=> Faux !
repère
caméra
repère
lumière
(spot)
ML
Mc
viewport
ct n
ive
rs tio
pe ojec
S PL
pe
pr
repère
scène
repère
local
Mo
repère
image
“Penser” les transformations
• Approche “repère global” • Approche “repère local”
– le repère reste fixe – chaque transformations
– définir les transformations affecte le repère courant
de droite à gauche – “amener” le repère dans la
position/orientation voulue
– composer de gauche à
droite
R*T*v
y
x
y y
y
x
x x
Transformation de visualisation
y
• Permet de positionner la caméra
z
transformation de visualisation x
~ inverse du repère local
x
z
• Rastérisation
– Pour chaque primitive P_i, trouver les rayons intersectant P_i
– Rendu en deux étapes
• projection des primitives sur l'écran (forward projection)
• discrétisation (conversion des primitives 2D en pixels)
Transformation de projection
• Projection perspective : top
left
bottom
near right
far
Transformation de projection
• Projection perspective :
aspect=w/h
fovy
w h
near
far
left
toward right
the
viewpoint
bottom
near
far
Vertex pipeline : résumé
Initialisation
Matrix3 M ;
M << 1, 2, 3,
4, 5, 6,
7, 8, 9;
Translation par un vecteur v Translation3f(v)
Rotation d'un angle theta autour AngleAxisf(theta,v)
d'un axe v M = Matrix3f(AngleAxisf(theta,v))
Mise à l'échelle Scaling3f(v)
Scaling3f(s0, s1, s2)
Transformation affine Affine3f A ;
partie linéaire (3x3) A.linear()
translation A.translation()
matrice 4x4 A.matrix()
Exemple :
Affine3f A ;
A = Translation3f(p) * AngleAxisf(theta,v) * Translation3f(-p) ;
v2 = A * v1 ;