Vous êtes sur la page 1sur 17

Plan

• Motivation
Synthèse d'image avancée • Rappels d’algèbre linéaire
• Transformations
Cours 2: Transformations, • Caméra sténopé, projection
perspective et caméras

Sources: Xavier Granier, Nicolas Holzschuch (M2 UJF / INPG Grenoble)

Motivation Motivations

• Une fois les objets modélisés, synthèse


• Positionner dans un même repère
• On doit être capable de contrôler les paramètres •Repère objet vers repère monde
de visualisation
• Mise à l'échelle
• La position des modèles et objets 3D • Translation / Rotation
• Pile de transformation
• La position et les paramètres du point de vue Y

X
Y
Z

Z
Motivations Plan

• Motivation
• Positionner dans le repère de la caméra
• Rappels d’algèbre linéaire
• Transformations
• Modèle caméra sténopé

Espaces vectoriels Bases

• (E, +, ·, K)
• E espace vectoriel (EV) sur K si • Combinaison linéaire dans E: ∑  a avec a ∈ E
i
i i i

⋅ ⋅x  =    ⋅x • →sous espaces vectoriels


  ⋅x = ⋅x ⋅x • Base b: ensemble [ e ,... , e ]∈ E permettant
1 n
n

d’exprimer tout vecteur x de E de manière unique:


⋅ x y  = ⋅x ⋅y
1⋅x = x • x : coordonnées de x dans la base b
i x =∑ x i e i
i
• →notation vectorielle: x
• Typiquement E=R , K=R n
[ ] ...
xn
1
Application linéaire Changement de base

• f : E→E est une application linéaire ssi • Soient 2 bases B et B’ de E


∀ u∈E ,∀ v∈E , f  uv  = f  u   f  v  • changement de base de B à B’:
application linéaire E→E associant aux
∀ u∈ E , ∀ c ∈ K , f  c⋅u  =c⋅ f  u 
coordonnées des vecteurs dans la base B leurs
• Représentation par une matrice dans une base b: coordonnées dans base B’ du même espace
exemple pour E=
• notation matricielle: exemple pour E=
[ ]
f 11 f 12 f 13

[ ]
b M= f 21 f 22 f 23 g 11 g 12 g 13 Vecteurs de base
b'
f 31 f 32 f 33 b B= g 21 g 22 g 23 de b exprimés
g 31 g 32 g 33 dans b'
Image des vecteurs de base par f

Changement de base Produit scalaire : E→K


Produit scalaire
Définition 1:

• Notation pratique:
b'
Points: x =bb' B b x

d
Concaténation de transformations x =dc B cb B ba B a x Définition 2:
Le produit scalaire entre 2 vecteur v1 (x1,y1,z1) et v2 (x2,y2,z2) est défini par :
v1.v2 = x1*x2 + y1*y2 + z1*z2 (dans une base orthogonale)

Fonctions: b M =ba B a M ab B
Autres définitions Espaces affines

• pb des espaces vectoriels: ne représentent que des vecteurs


• EV peut représenter rotations, changements d’échelles mais
pas translation
• norme
• produit vectoriel • espaces affines: ensembles point + vecteur
• orthogonalité Q=P+u Q
• bases orthonormées u=Q-P
P
P
• Notation matricielle?

Plan Transformations géométriques

• Représentation vectorielle des points


• Points attachés aux primitives graphiques
• Motivation • Sommets, centres,données volumiques…
• Rappels d’algèbre linéaire • Transformations sur ces données
• Transformations • Translation, rotation, changement d’échelle…
• Modèle caméra sténopé • Projections :
• Perspective, parallèle…
• Notation matricielle unifiée ?
En 2 dimensions Translations

• On commence en 2D
– Plus facile à se représenter • Modification simple :
• Chaque point est transformé: • x’ = x+tx

• y’ = y+ty
– x’ = f(x,y)
– y’ = g(x,y)
• Quelle forme pour la transformation ?

Avant Après

Notation vectorielle Changement d’échelle

• Les coordonnées sont multipliées par le facteur


• On utilise des vecteurs pour la représentation
de changement d’échelle :
– C’est plus simple
• x’ = sx x
• Un point est un vecteur
• y’ = sy y

• Une translation est une somme vectorielle : P’ = P + T

Avant Après
Notation matricielle Rotation

• Rotation de coordonnées en 2D :
• C’est une multiplication matricielle :
• x’ = cosθ x - sinθ y
P’ = SP • y’ = sinθ x + cosθ y

S=
[ sx
0
0
sy ] θ

Avant Après

Unification
Notation matricielle
• Notation simple, concise
• Mais pas vraiment unifiée
• Rotation = multiplication matricielle :
– problème de représentation des translations
P’=RP – Comment faire pour concaténer plusieurs
transformations, translation + rotation ?

S= [ cos  −sin 
sin  cos  ] • On veut une notation unique
– Comment faire ?

En terme de
changement de
base?
Coordonnées homogènes Coordonnées homogènes

• Outil géométrique très puissant : géométrie • Deux points sont égaux si et seulement si :
projective – x’/w’ = x/w et y’/w’= y/w

– Utilisé partout (Image, Vision, Robotique...) • w=0: points « à l’infini »


• On ajoute une troisième coordonnée, w – Permet de représenter les espaces affines
(différencier points et vecteurs)
• Un point 2D devient un vecteur à 3 coordonnées : – Permet de représenter les projections

[ ][ ]
x x
[ ] x =
y
y =
1
y
w

Translations en coordonnées homogènes Échelle en coordonnées homogènes

[ ][ ] [ ][ ]
1 0 tx x sx 0 0 x
0 1 ty
0 0 1
y
w [ x /wt x
y /w t y ] 0 sy 0
0 0 1
y
w [ sx x / w
s y y /w ]

[ ] [ ]
x w t x sx x
yw t y sy y
w w
Échelle en coordonnées homogènes Rotation en coordonnées homogènes

[ 1 0 0
0 1 0
0 0 1/ s ][ ] x
y
w [ s x /w
s y/ w ] [ cos  −sin  0
sin  cos  0
0 0 1 ][ ] x
y
w [  x / w cos − y / w sin 
 x / w sin  y / w cos  ]

[ ]x
y
w /s [ x cos − y sin 
x sin  y cos 
w ]
Composition des transformations Rotation autour d’un point Q

• Il suffit de multiplier les matrices :


• Rotation autour d’un point Q:
– composition d’une rotation et d’une translation:
M = RT – Translater Q à l’origine (TQ),

• Toutes les transformations 2D peuvent être exprimées – Rotation autour de l’origine (RΘ)
comme des matrices en coord. homogènes
– Translater en retour vers Q (- TQ).
– Notation très générale

P’=(­TQ)RΘTQ P
Et en 3 dimensions ? Translations en 3D ?

• C’est pareil

[ ]
• On introduit une quatrième coordonnée, w 1 0 0 tx
– Deux vecteurs sont égaux si : 0 1 0 ty
x/w = x’/w’, y/w = y’/w’ et z/w=z’/w’
• Toutes les transformations sont des matrices 4x4 0 0 1 tz
0 0 0 1
[ ][ ][ ]
x x
x
y = y
y =
z z
z
1 w

Changement d’échelle en 3D ? Rotations en 3D



• Rotation : un axe et un angle

[ ]
• La matrice dépend de l’axe et de l’angle
sx 0 0 0 • Expression directe possible, en partant de l’axe et de l’angle, et
quelques produits vectoriels
0 sy 0 0 – Passage par les quaternions

0 0 sz 0 • Les rotations autour d’un axe de coordonnées ont une


expression simple

0 0 0 1 – Les autres rotations s’expriment comme combinaison de ces


rotations simples
Rotation autour de l’axe x Rotation autour de l’axe y

[ ] [ ]
1 0 0 0 cos  0 sin  0
axe x axe y
0 cos  −sin  0 invariant
0 1 0 0
invariant
0 sin  cos  0 −sin  0 cos  0
0 0 0 1 0 0 0 1

Vérification: une rotation de π/2  Vérification: une rotation de π/2 
devrait changer y en z, et z en ­y devrait changer z en x, et x en ­z

Rotation autour de l’axe z Rotation autour d’un axe quelconque

[ ]
cos  −sin  0 0 • Rotation autour d’un axe n:
sin  cos  0 0 axe z
– Changement de repère (Bn) où n devient l’axe x
invariant
0 0 1 0
– Rotation autour de x (RΘ)
0 0 0 1
– Changement de repère en retour vers B-1
n.

Vérification: une rotation de π/2 
devrait changer x en y, et y en ­x -1
P’=BnRΘBn P
Toutes les transformations 3D Attention !

• La multiplication de matrice n’est pas commutative

• Toute transformation 3D s’exprime comme • L’ordre des transformations est important


combinaison de translations, rotations, changement – Rotation puis translation aura un effet très différent de
d’échelle translation puis rotation
– Et donc comme une matrice en coordonnées homogènes – L’ordre des angles d’Euler est un grand classique
– Une source de bugs très courante

Définition d’objets complexes Definir un objet complexe

• L’objet est défini comme une combinaison d’objets


Notre problème : plus petits
• Exemples : robots, voiture, roue…

• On veut un comportement normal :


β – L’objet reste connecté : si je bouge le bras, la main suit
α γ – Utiliser les paramètres naturels : x,α,β,γ

x
Comment faire ? Coordonnées relatives
• Utiliser les coordonnées relatives :
– La position de l’avant-bras est donné en fonction du bras

• Mais il faut bien revenir aux coordonnées absolues :


• Coordonnées relatives – On utilise une concaténation des transformations :

– La position de la roue par rapport à la voiture • Translation sur la position du bras

• Dessiner le bras
– La position des boulons par rapport à la roue
• Translation sur la position de l’avant-bras par rapport au bras

• On utilise rarement des coordonnées absolues... • Rotation

• Dessiner l’avant-bras

– Je veux revenir aux coordonnées du bras, ou de l’épaule

• Que faire ?

Pile de transformations Pile de transformations


•Garder l’information sur les transformations successives
– initially = M, from model to camera
– M’=MT (translation by x) • OpenGL:
– draw robot body
–popmatrix(), pushmatrix()
– M”=M’T1 (translation to center of 1st wheel)
• Postscript:
– draw first wheel as circle of center (0,0)
– return to M’ –gsave, grestore
– M’’’=M’T2 (translation to center of 2nd wheel)
– draw second wheel
Exemple d’implémentation Définition hiérarchique
– Set transformation as projection matrix

– translate by x (concatenate translation matrix with transformation matrix)

– draw car body


• Comment savoir quelle est la bonne transformation ?
– save transformation matrix

– translate+rotate • Comment savoir qu’il est temps de revenir à la


– draw first wheel transformation précédente ?
– restore transformation matrix
• Définition hiérarchique des objets
– save transformation matrix

– translate+rotate
• Dessiner l’objet = traversée de la hiérarchie
– draw second wheel

– restore transformation matrix

Objet défini hiérarchiquement En OpenGL

transl. x • glMatrixMode(GL_MODELVIEW)
• glLoadIdentity
body
• glRotatef, glTranslatef...
transl. transl.
transl. • glScalef
1st wh. 2nd wh. • glPushMatrix, glPopMatrix
Rot. α
• cf TD2, Tutorial Nate Robins
Objets ré-utilisables
1st arm
•Une procédure pour toutes les roues
•Principe du graphe de scène …
(OpenSG...)
Projections et perspectives Projections

• Représentation d’une scène 3D, pour un observateur virtuel


• Un point de vue :
• Affichage d’un modèle 3D
– position de l’observateur
• Fenêtre 2D
• Une direction de visée :
• Transformation des coordonnées 3D du modèle vers – direction vers laquelle est tourné l’observateur
les coordonnées 2D des pixels
• Une direction « en haut » :
– la verticale pour l’observateur
Coordonnées Coordonnées
3D du modèle 2D des pixels

Différent types de projections Projections

• Projections parallèles : • Perspective • Parallèle ou


– Pas de rétrécissement des objets dans le lointain • Orthographique
– Plusieurs types de projections parallèles :

• isométrique, orthographique,…

• Projection perspective :

– Les objets lointains sont plus petits

– Plusieurs types :

• Un, deux ou trois points de fuite


Projections orthographiques Projection perspective
Projections orthographiques
• Direction de projection orthogonale au plan de projection lui
même parallèle à l'un des axes principaux.
• Les 3 vues du dessin technique (dessus, coté, face) sont des
projections orthographiques permettant des mesures.
• En pratique, il s'agit simplement de supprimer une coordonnée
• Matrices :

[ ][ ][ ]
0 0 0 0 1 0 0 0 1 0 0 0
P x= 0 1 0 0 Py= 0 0 0 0 P z= 0 1 0 0
0 0 1 0 0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 1 0 0 0 1

Projection perspective Ouverture de vue

• Le distance focale n’est pas un paramètre intuitif


• Ouverture de vue : plus simple
T T – Angle
[ x , y , z ]  [ f x /z , f y / z ] – Exprime la largeur du champ visuel

][ ]
x

[ ][
f x f 0 0 0
y
f y = 0 f 0 0
z
z 0 0 1 0
1
Ouverture Projection perspective

tan =1/ f
f f • Projection sur le plan z=0, avec le centre de projection
placé à z=-f (convention OpenGL):
Point de vue 1

[ ]
α
1 0 0 0
P= 0 1 0 0
­1 0 0 1/ f 0
Plan de
projection

Autres positions de la caméra Empilent des transformations

• Position de la caméra ultra-simple


– Plan image sur z=0, vision suivant z
• Comment passer à un modèle général ?
– Point de vue quelconque, direction quelconque…
–→ changements de repère:

Nate Robins tutorials


En OpenGL < 4.0

• glOrtho
• glFrustum
• gluPerspective
• gluLookAt
• conventions de repère différentes
• gestion de la pyramide de vue (clipping)

Vous aimerez peut-être aussi