Vous êtes sur la page 1sur 10

LO12

4. Transformations géométriques 4.1 Les transformations 2D

„ plusieurs repères :
⎛ x⎞ ⎛ x′ ⎞
• objet, Soient X = ⎜⎜ ⎟⎟ point de départ et X′ = ⎜⎜ ⎟⎟ le point final (transformé de X)
• scène, ⎝ ⎠
y ⎝ y′ ⎠
• observateur(caméra), Toutes les transformations ponctuelles dans le plan peuvent s' écrire :
• écran:
transformations pour passer zo Plan de projection X′ = AX + B
d’un repère à l’autre. yo ⎛a a12 ⎞ ⎛b ⎞
z xo Objet projeté A est une matrice 2 × 2 inversible ⎜⎜ 11 ⎟⎟ B est un vecteur ⎜⎜ 1 ⎟⎟
⎝ 21
a a 22 ⎠ ⎝ b2 ⎠
„ description 3D pour un
⎧ x′ = a11 x + a 12 y + b1
y
affichage 2D: x yc ⎨
projection de la scène sur xc ⎩ y′ = a 21 x + a 22 y + b 2
Point de visée zc
l ’écran
Caméra
(observateur de
la scène)

Les transformations 2D Les transformations 2D

„ Changement d'échelle

⎛ ex 0⎞
„ Translation A est une matrice diagonale Eex ,ey = ⎜⎜ ⎟ B est nul
⎝0 e y ⎟⎠
⎧ x′ = e x x
P’(x’,y’) ⎨ ′
⎩ y = ey y
⎛ 1 0⎞
A est la matrice identité ⎜⎜ ⎟⎟ v „ Rotation par rapport à l'origine
⎝0 1⎠ y’
P’
P(x,y)
⎛x ⎞
B est le vecteur de translation Tv = ⎜⎜ v ⎟⎟ y P
⎝ yv ⎠ α
⎧ x′ = x + xv

⎩ y′ = y + yv
x’ x

⎛ cosα - sin α ⎞ ⎛ 0⎞
A est la matrice de rotation Rα = ⎜⎜ ⎟ B est nul ⎜⎜ ⎟⎟
⎝ sin α cosα ⎟⎠ ⎝ 0⎠
⎧ x′ = x cosα − y sin α

⎩ y ′ = x sin α + y cosα

Chap 4 1
LO12

Les transformations 2D Transformations inverses

„ Symétrie par rapport à un axe −1


„ Transformations inverses Translation : Tv = T- v
⎛1 0 ⎞
A est la matrice symétrie par rapport à l' axe des x S x = ⎜⎜ ⎟⎟ B est nul −1
⎝ 0 − 1⎠ Rotation : Rθ = R -θ

⎧x = x −1
Changement d' échelle : E ex ,ey = E 1/ex ,1/ey

⎩ y′ = − y −1 −1
Symétrie : S x = S x et S y = S y
⎛ −1 0⎞
A est la matrice symétrie par rapport à l' axe des y S y = ⎜⎜ ⎟⎟ B est nul
⎝ 0 1⎠
⎧ x ′ = − x „ Transformations de P(x,y)
⎨ coordonnées y’ y (x’,y’)
⎩ y′ = y P(x,y)
(x’,y’) y’
y x’

α
„ Application aux objets
v x’ x
en théorie : on applique la transformation ponctuelle en chaque point de l’objet
x
en pratique : seulement quelques points de référence
⎧ x′ = x − xv ⎧ x′ = x cos α + y sin α
⎨ ⎨
⎩ y ′ = y − yv ⎩ y′ = − x sin α + y cos α

Composition des transformations Coordonnées homogènes

Une transformation peut se représenter sous forme d' une seule matrice M
X' = MX
„Toute transformation peut se θ
C' est possible pour toutes les transformations élémentaires sauf
décomposer en composition
de transformations v P la translation. Pour cela on utilise les coordonnées dites homogènes
élémentaires
„ Définition

A tout point (x, y) de ℜ 2 , on fait correspondre un triplet (h1, h2 ,s)


„Comment exprimer de manière si s = 1 alors h1 = x et h2 = y (normalisées)
simple une transformation non si s = 0 alors le point se transforme à l' infini
élémentaire? sinon s est un facteur d' échelle : h1 = s ⋅ x et h2 = s ⋅ y
Transformation : translation vers l' origine T- v
rotation : Rθ une transformation géométrique peut s' écrire
Exemple : la rotation par rapport translation vers le point P : Tv ⎡ x '⎤ ⎡ x⎤
à un point P ⎢ y '⎥ = ⎡ A B⎤ ⋅ ⎢ y ⎥ A : rotation, échelle, symétrie
⎢ ⎥ ⎢ 0 1⎥ ⎢ ⎥
⎣ ⎦ ⎢1 ⎥ B : translation
⎣⎢ 1 ⎦⎥ ⎣ ⎦

Chap 4 2
LO12

Transformations en coordonnées homogènes Représentation matricielle des transformations

Soient X le point de départ et X′ le point final (transformé de X) .


X′ et X sont des vecteurs colonnes
⎡1 0 v x ⎤ Les transformations sont représentées par des multiplications
translation : ⎢⎢0 1 v y ⎥⎥ matricielles à gauche.
⎣⎢0 0 1 ⎥⎦
⎡cos θ − sin θ 0⎤ X′=AX
rotation : ⎢⎢ sin θ cos θ 0⎥⎥
On trouve une autre notation en infographie
⎣⎢ 0 0 1⎦⎥
⎡e x 0 0⎤
échelle : ⎢⎢ 0 ey 0⎥⎥
Y′ et Y sont des vecteurs lignes
⎢⎣ 0 0 1⎥⎦ Les transformations sont représentées par des multiplications
⎡1 0 0⎤ ⎡− 1 0 0⎤ matricielles à doite.
symétrie/x : ⎢⎢0 − 1 0⎥⎥ symétrie/y : ⎢⎢ 0 1 0⎥⎥ Y′=YB
⎢⎣0 0 1⎥⎦ ⎢⎣ 0 0 1⎥⎦
équivalence
si X=YT et X′=Y′T alors A =BT

Composition des transformations en coordonnées Composition des transformations en coordonnées


homogènes homogènes
„ Composition de transformations : produit matriciel „ exemple Transformation Rθ , P :
• Transformations successives 1 ) M1 1 ) translation de P vers l' origine T- v
2) M 2 2) rotation de θ autour de l' origine : Rθ
3) M 3 3) translation vers le point P : Tv
• Appliquée à n points Rθ , P = Tv ⋅ Rθ ⋅ T- v
P1 ' = M 3 ⋅ M 2 ⋅ M1 ⋅ P1 X' = Rθ , P ⋅ X
P2 ' = M 3 ⋅ M 2 ⋅ M1 ⋅ P2
... „ Opération de prélèvement

Pn ' = M 3 ⋅ M 2 ⋅ M1 ⋅ Pn
• Composition des transformations : calcul d'une matrice Soit un objet défini dans son propre repère.
M = M 3 ⋅ M 2 ⋅ M1 Le placer dans une image consiste à :
1) effectuer une mise à l ’échelle
P1 ' = M ⋅ P1 2) effectuer une rotation
P2 ' = M ⋅ P2 3) effectuer une translation
...
Pn ' = M ⋅ Pn

Chap 4 3
LO12

4.2 Les transformations 3D Les transformations 3D

„ Repère direct z „ Coordonnées cartésiennes et sphériques

x
„ Repère indirect lié à l’observateur „ Repère direct lié à l’observateur

y y Angles azimuth et élévation


x x dans certaines applications
(OpenGL)

z z

Les transformations élémentaires Composition des transformations


z α
„ Translations ⎡1 0 0 xt ⎤ „ Changements d'échelle ⎡ex 0 0 0⎤ „ Principe: le même qu’en 2D;
⎢0 1 0 y ⎥ ⎢0 e 0 0⎥⎥ on multiplie les matrices
Txt, yt,zt = ⎢ t⎥
E ex,ey,ez = ⎢ y

⎢0 0 1 z t ⎥ ⎢0 0 ez 0⎥ représentant les transformations


⎢0 0 0 1 ⎥ ⎢ ⎥ élémentaires.
⎣ ⎦ ⎣0 0 0 1⎦
y
„ Symétries par rapport à un plan „ Rotations par rapport à un axe
„ Exemple: Rotation autour d’un
⎡1 0 0 0⎤ ⎡1 0 0 0⎤
axe // à l ’axe x.
⎢0 ⎢0 cosα 0⎥⎥
1 0 0⎥⎥ ⎢ - sinα
S xy : ⎢ R x,α :
⎢0 0 -1 0⎥ ⎢0 sin α cosα 0⎥ x P(a,b,c)
⎢ ⎥ ⎢ ⎥
⎣0 0 0 1⎦ ⎣0 0 0 1⎦
⎡1 0 0 0⎤ ⎡ cos α 0 sinα 0⎤ „ Matrice de transformation : ⎡1 0 0 a ⎤ ⎡1 0 0 0 ⎤ ⎡1 0 0 − a⎤
⎢ 0 ⎢0 1 0 b ⎥⎥ ⎢⎢0 cos α 0⎥⎥ ⎢⎢0 1 0 − b ⎥⎥
⎢0 0⎥⎥ 1 0 0⎥⎥ − sin α
M=⎢
-1 0
S xz : ⎢ R y,α : ⎢
⎢0 0 1 0⎥ ⎢- sinα 0 cosα 0⎥ ⎢0 0 1 c ⎥ ⎢0 sin α cos α 0 ⎥ ⎢0 0 1 − c⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎢ ⎥⎢ ⎥
⎣0 0 0 1⎦ ⎣ 0 0 0 1⎦ ⎣0 0 0 1 ⎦ ⎣0 0 0 1 ⎦ ⎣0 0 0 1 ⎦
⎡- 1 0 0 0⎤ ⎡cosα - sinα 0 0⎤ ⎡1 0 0 0 ⎤
⎢0 ⎢ sinα 0⎥⎥ ⎢0 − b cos α + c sin α + b⎥⎥
1 0 0⎥⎥ cosα 0 cos α − sin α
S yz : ⎢ R z,α : ⎢ =⎢
⎢0 0 1 0⎥ ⎢ 0 0 1 0⎥ ⎢0 sin α cos α − b sin α − c cos α + c ⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎣0 0 0 1⎦ ⎣ 0 0 0 1⎦ ⎣0 0 0 1 ⎦

Chap 4 4
LO12

4.4 Transformations de coordonnées Transformations de coordonnées

„ Opération de changement de répère „ On suppose ici que l'observateur vise le centre de la scène (polarview)
• position de l'observateur
„ Appliquée lorsqu’on passe du repère de la scène au repère
• point de visée : centre du repère scène
observateur twist twist
• angle de "twist" : tête droite
„ Un exemple : le polarview

yc xc yc xc

zc
zc
d
z C z C

O y O y
x φ x φ
θ θ

Le polarview (1) Le polarview (2)

„ Rotation de - (π/2 - θ) autour de z „ Rotation de (π/2 + φ) autour de x1


Alignement de l’axe y du repère observateur dans le plan OCz „ Pointe l’axe z du repère observateur vers le centre du repère scène
⎡ ⎛π ⎞ ⎛π ⎞ ⎤
⎡ x1⎤ ⎢cos⎜ 2 −θ ⎟ −sin⎜ 2 −θ ⎟ 0 0⎥⎡ x ⎤ ⎡ x2⎤ ⎢
⎡1 0
⎛ π ⎞
0
⎛ π ⎞
0⎤
⎡ x1⎤
⎢ y1⎥ ⎢ ⎝ ⎠ ⎝ ⎠ ⎥⎢ y ⎥ ⎢ y2⎥ ⎢0 cos⎜ − −φ ⎟ −sin⎜ − −φ ⎟ 0⎥⎥⎢ ⎥
⎢ ⎥ =⎢ sin⎛⎜ π −θ ⎞⎟ cos⎛⎜ π −θ ⎞⎟ ⎝ 2 ⎠ ⎝ 2 ⎠
⎢ ⎥ =⎢ y1
Rotation R z (π/2 - θ) : 0 0⎥⎢ ⎥ Rotation R x(-π/2 - φ) : ⎥⎢ ⎥
⎢ z1⎥ ⎢ ⎝ 2 ⎠ ⎥⎢ z ⎥ ⎢ z2 ⎥ ⎢0 sin⎛⎜ − π −φ ⎞⎟ cos⎜⎛ −π −φ ⎞⎟ 0⎥⎢ z1⎥
⎝2 ⎠ ⎢ ⎥ ⎢
xc ⎢ ⎥ ⎢ 1 0⎥⎢ ⎥ xc ⎣ 1 ⎦ ⎢0 ⎝ 2 ⎠ ⎝ 2 ⎠ ⎥ 1⎥

1⎦⎥⎣ ⎦
yc 0 0 yc
⎣1⎦ ⎢ ⎥⎣ 1 ⎦ ⎣ 0 0
⎣ 0 0 0 1⎦
zc zc
z
C y2 C
z1 z1

x1 y φ
O z2 O
x π/2 - θ x1
θ y1 φ x2 θ y1 φ

Chap 4 5
LO12

Le polarview (3) Le polarview (4)

„ Rotation de π autour de y2
Rotation R y(π) : „ Translation de d = distance de O vers C : ⎡ x'⎤ ⎡1 0 0 0 ⎤⎡ x3⎤
⎢ y'⎥ ⎢0 ⎥⎢ y3⎥
(repère direct) ⎡ x3⎤ ⎡ cosπ 0 sinπ 0⎤⎡ x2⎤ translation T(0,0,-d) : ⎢ ⎥ =⎢ 1 0 0 ⎥⎢ ⎥
⎢ y3⎥ ⎢ 0 1 0 0⎥⎥⎢⎢ y2⎥⎥
⎢ z'⎥ ⎢0 0 1 − xc + yc + zc ⎥⎢ z3⎥
2 2 2

⎢ ⎥ =⎢ ⎢ ⎥ ⎢ ⎥⎢ ⎥
⎣ 1 ⎦ ⎣0 0 0 1 ⎦⎣ 1 ⎦
⎢ z3⎥ ⎢−sinπ 0 cosπ 0⎥⎢ z2 ⎥
⎢ ⎥ ⎢ ⎥⎢ ⎥
⎣1⎦ ⎣ 0 0 0 1⎦⎣ 1 ⎦
yc xc
Yc
yc xc
Xc

y3
y2 zc zc
x3 C Zc
y3 C
x3
z3
z2 O
z3
O
x2 θ φ
θ φ Repère direct

4.5 Les transformations avec OpenGL Les transformations avec OpenGL

„ Une seul matrice : ModelView


„ Tranformations élémentaires

x glTranslate*(…);
y Matrice Matrice de ViewPort
z ModelView Projection
glRotate*(…);
w glScale*();
Repère
Repère Repère écran Repère …
observateur
objet fenêtre „ Capacité de mémorisation : gestion d’une pile
Affiche le point X’ = ModelView X
glPushMatrix (…)
glPopMatrix (…)
„ Équivaut à un seul repère : repère observateur
glLoadMatrix (…)

„ Les transformations de déplacement de scène et de
„ Produit de matrice à droite
positionnement de l’observateur sont combinées et stockées dans
la même matrice

Chap 4 6
LO12

Les transformations avec OpenGL Les transformations avec OpenGL

„ Remarque très importante : tutoriel de Nate Robins : http://www.xmission.com/~nate/tutors.html

La multiplication des matrices se faisant à droite, il faut faire


attention à l'enchaînement des transformations. Par exemple,
pour réaliser la transformation composée d'une rotation puis une
translation sur P, soit P' = T.R.P, il faut réaliser les appels
suivants :
glTranslate*(…);
glRotate*(…);
afficheP(…)

Les transformations avec OpenGL 4.6 Les projections sur un plan


ModelView ModelView ModelView
Positionnement pushMatrix Rotation „ Transformation des coordonnées du point de vue de l’observateur
de l'observateur
LookAt
dans le plan de l’écran
I *MLA
I I *MLA I *MLA
Affichage des Affichage des „ Classification
Affichage des
objets directement objets: applique la objets: applique la • projection non planaire (écran de projection non plan)
dans le repère transformation transformation dans
observateur dans la matrice la matrice courante: • projection planaires
courante : I * MLA I * MLA
projections planaires
ModelView ModelView
popMatrix perspectives parallèles

I *MLA*R
I *MLA I *MLA
obliques orthogonales
Affichage des Affichage des objets
objets: applique la : applique la 1 point de fuite principal
transformation transformation dans
dans la matrice la matrice courante: 2 points de fuite principaux générale
courante : I * MLA I *MLA* R 3 points de fuites principaux dessin industriel axonométrique
cavalière
cabinet 3 vues isométrique
vue auxiliaire dimétrique
vue en coupe trimétrique

Chap 4 7
LO12

Les projections perspectives Les projections perspectives

„ Définition du centre de projection „ Points de fuite : 1, 2 ou 3


„ Définition du plan de projection

Les projections perspectives Les projections perspectives

Généralement : „ Calcul des coordonnées écran „ Plan de projection est // au plan


0xoyo
„ centre de projection = position de l ’observateur
„ plan de projection (perpendiculaire à l’axe de visée de l’observateur : écran
xe xo ye yo d
Z ou -Z) = = zo
d zo d zo
P(xo,yo,zo) xe
xo
P(xo,yo,zo)
xo yo
yo P’(xe,ye) xe = d ye = d
zo zo
P(xo,yo,zo)
yo ye
observateur
zo
zo écran
d
xo

écran

Chap 4 8
LO12

Influence de la position des objets Influence de la position des objets

„ position de l'objet
Plan de projection „ position du centre entre l'objet et le plan de projection

Plan de projection
Centre de projection

„ position de l'écran

Plan de projection
Plan de projection

Centre de projection
Centre de projection
Centre de projection
Plan de projection

Les projections parallèles Les projections parallèles

„ plan de projection
„ centre rejeté à l’infini
„ plan de projection (perpendiculaire à l’axe de visée de
l’observateur : Z ou -Z)

yo
P’(xe,ye) P(xo,yo,zo)

observateur

zo
xo
écran

„ orthogonale ou obliques „ calcul des coordonnées écran


• orthogonales : axes de projection perpendiculaires au plan de projection.
xe = xo ye = yo
• obliques : axes de projection font un angle différent de 90° avec le plan de
projection

Chap 4 9
LO12

Exemples 4.7 Les projections avec OpenGL

perspective perspective „ La matrice : GL_PROJECTION

x
y Matrice Matrice de ViewPort
z ModelView Projection
w
Repère Repère écran
Repère Repère
observateur
objet fenêtre

„ indépendante de la matrice du modèle


„ initialisée par fonctions OpenGL

parallèle

Les projections avec OpenGL

„ Projection perspective

glFrustum(…);
gluPerspective(…);

„ Projection orthogonale

glOrtho (…)

Généralement, ces fonctions sont appelées une seule fois.


On ne compose pas les transformations de projection

Chap 4 10

Vous aimerez peut-être aussi