modélisation 3d et synthèse - fil lille 1aubert/m3ds/m3ds... · 2020-02-05 · i on connait le...

66
Chapitre 5 : Transformations et changements de repères Modélisation 3D et Synthèse Master Informatique 2019-2020 [email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 1 / 66

Upload: others

Post on 14-Feb-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Chapitre 5 : Transformations et changements de repèresModélisation 3D et Synthèse

Master Informatique

2019-2020

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 1 / 66

Page 2: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

1 Repères d’une scène 3D

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 2 / 66

Page 3: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Repère 3D

X

Y

Z

i

j

k

A

x A

y A

zA

O

I Repère noté (O, i, j,k) (origine etvecteurs de base).

I Un point : A =−→OA =

AxAyAz

ou

A = (Ax ,Ay ,Az).

I A = O+ xi + yj + zk .

I Les repères considérés seront généralement directs :

• Règle de la main droite : (Pouce,Index,Majeur) = (X ,Y ,Z)

I Un repère est dit orthonormé si :

• Vecteurs (i, j,k) deux à deux orthogonaux.• (i, j,k) de même normes 1.

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 3 / 66

Page 4: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Plusieurs repères

I On travaillera avec plusieurs repères : toujours préciser le repère en indice.

I Sur l’exemple, un même point A a les coordonnées (x1,y1,z1) dans le repère 1 et(x2,y2,z2) dans le repère 2.

A

x1

x2

y1

y2

Repère 1

Repère 2

⇒ Noter A1 ou A2 selon le repère considéré (même point mais coordonnéesdifférentes)

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 4 / 66

Page 5: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Positions et directions

I Distinguer les positions (i.e. les points) et les directions (i.e. les vecteurs).I Exemple :

• Le point A est déplacé au point A′ par le vecteur u. Le point B est déplacé au point B′

par le même vecteur u.• Par le calcul : A′ = A+u et B′ = B+u.

• Les coordonnées d’une direction

(uxuy

)indiquent une variation ux en x et une

variation uy en y

• Remarque u =−→AA′ =

−→BB′ = A′−A.

I Attention : dans le code on représente généralement les positions et les directions parune même classe (Vector3 pour les tps).

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 5 / 66

Page 6: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Scène 3D et repères

I Pour la conception d’une scène 3D et de ses objets 3D, nous considérons les repèressuivants :

• Le repère de l’observateur (ou repère de la caméra ; noté Eye dans la suite) : c’estdans ce repère qu’on définit le volume de visualisation (i.e. placement de l’écran etdéfinition des paramètres de la projection).

• Le repère local (ou repère objet ; noté Local dans la suite) : on conçoit un objetindépendamment du reste de la scène. On prendra le repère le plus naturel pourdéfinir les points de l’objet.

• Le repère du monde (ou repère de scène ; noté World dans la suite) : il s’agit durepère global de référence de tout positionnement (les repères locaux et la caméraseront placés directement ou indirectement par rapport à World).

I Nous placerons les repères les uns par rapport aux autres avec des changements derepères (en général par translations, rotations, changements d’échelle). Le repère "initial"étant le repère de scène World.

I Les positions (x ,y ,z) des sommets des objets 3D sont données dans le repère Local del’objet qu’ils définissent, et l’objet est placé dans la scène en déplaçant son repère local (etnon directement/explicitement ses points).

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 6 / 66

Page 7: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Exemple

1) on dispose d’un objet défini dans sonrepère local

2) on souhaite

3) on place Local par rapport à World 4) on obtient (points toujours exprimésdans le repère local)

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 7 / 66

Page 8: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Repères et OpenGL

I Chapitre précédent : donner au vertex shader les positions PEye = (x ,y ,z) (i.e. définiesdans le repère de l’observateur).

• Obtenir PClipCoordinates (i.e. gl_Position=...) à partir de PEye avec la matrice deprojection.

I Dans la suite : donner au vertex shader l’attribut positions PLocal = (x ,y ,z) (i.e.définies dans le repère de l’objet à tracer). Dans le vertex shader il faudra :

1 Obtenir PEye à partir de PLocal : pour cela on indiquera comment est placé le repèreLocal par rapport au repère Eye avec une matrice de changement de repèresappelée modelview (cf la suite du cours).

2 Puis obtenir PClipCoordinates à partir de PEye avec la matrice de projection (commeprécédemment).

g l _ P o s i t i o n = p r o j e c t i o n ∗ modelview ∗ p o s i t i o n ;

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 8 / 66

Page 9: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

2 Transformations et changement derepères

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 9 / 66

Page 10: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Coordonnées homogènes (point)

I Un point (une position) 3D en coordonnées homogènes :

P3D =

xyz

⇐⇒ PH =

xwywzww

avec w ∈ R∗(w 6= 0)

I Passer des coordonnées homogènes en coordonnées 3D :

PH =

xyzw

⇐⇒ P3D =

x/wy/wz/w

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 10 / 66

Page 11: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Coordonnées homogènes (vecteur)

I Un vecteur (une direction) 3D en coordonnées homogènes :

u3D =

xyz

⇐⇒ uH =

xyz0

noter le 0

I Passer des coordonnées homogènes en coordonnées 3D :

uH =

xyz0

⇐⇒ u3D =

xyz

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 11 / 66

Page 12: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Exemple de la translation

I Rappel (cf introduction des coordonnées homogènes dans le chapitre précédent) : la

translation de vecteur t =

txtytz

peut se traduire par une matrice en coordonnées

homogènes :

T =

1 0 0 tx0 1 0 ty0 0 1 tz0 0 0 1

I On donne, dans les transparents suivants, 3 interprétations de cette translation (avec les

mêmes coordonnées P(x ,y ,z) et la même translation t dans les 3 cas).

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 12 / 66

Page 13: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Interprétation par transformation

I On connait le point P(x ,y ,z) donné dans un repère 1 et on déplace le point P en P′ par latranslation t .

P ′ = TP

T appelée matrice de transformation.

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 13 / 66

Page 14: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Interprétation par changement de repère

I On connait le point P(x ,y ,z) exprimé dans un repère 2 et on déplace le repère 2 enpartant du repère 1 par la translation t .

I Dans cette interprétation, T est appelée la matrice de passage du repère 1 au repère 2,et on la note M1→2.

I On connait P2 = P(x ,y ,z). On peut déduire P1 par :

P1 = M1→2P2 avec P2 = P et M1→2 = T

I Remarque : P1 correspond à P′ du transparent précédent (c’est le même calcul).

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 14 / 66

Page 15: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Interprétation inverse

I On connait le point P(x ,y ,z) donné dans le repère 1 et on se donne un repère 2 parrapport au repère 1 par la translation t .

I On a toujours la relation :

P1 = M1→2P2 mais, cette fois, c’est P1 qu’on connait : P1 = P

I Si on souhaite P2, on peut l’obtenir par P2 = M2→1P1.

I M2→1 ? obtenue par la translation opposée −t .

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 15 / 66

Page 16: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Changement de repère (généralisation)

P1 = M1→2P2

(bien noter la position et l’ordre des indices dans la relation).

I M1→2 dans la relation indique :

• comment le repère 1 est déplacé vers le repère 2• permet d’exprimer les coordonnées du point P dans le repère 1 à partir des

coordonnées dans le repère 2.

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 16 / 66

Page 17: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Attention à la confusion ! ! !

P1 = M1→2P2

I "le passage du repère 1 au repère 2" signifie (i.e. noté M1→2) :

• le déplacement du repère 1 vers le repère 2 .• Et non pas "passer" d’un point P1 (coordonnées dans le repère 1) vers P2

(coordonnées dans le repère 2) : c’est le contraire (bien noter la position des indicesdans la relation).

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 17 / 66

Page 18: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Rotation en 2D

Rotation d’angle θ autour de l’origine.

��

��

{x ′ = x cos(θ)− y sin(θ)y ′ = x sin(θ)+ y cosθ

Comment retrouver? Soit α l’angle (i,OP) et r = ‖OP′‖= ‖OP‖. Alors

{x ′ = r cos(α+θ)

y ′ = r sin(α+θ)

{x ′ = r cos(α)cos(θ)− r sin(α)sin(θ)y ′ = r cos(α)sin(θ)+ r sin(α)cos(θ)

or x = r cos(α) et y = r sin(α)

P ′ = RP avec R =

(cosθ −sinθ

sinθ cosθ

)[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 18 / 66

Page 19: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Rotation en 3D

I La rotation en 3D s’effectue autour d’un axe dont on donne un vecteur directeur u(rotations considérées : axe passant par l’origine).

I Le sens de rotation est le sens trigonométrique par rapport à l’axe (« tourne » dans lesens direct quand le vecteur de l’axe pointe vers vous).

I Exemple : autour de l’axe z (droite de vecteur directeur (0,0,1)).

ROZ =

cosθ −sinθ 0sinθ cosθ 0

0 0 1

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 19 / 66

Page 20: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Rotation 3D : autres axes

ROX =

1 0 00 cosθ −sinθ

0 sinθ cosθ

ROY =

cosθ 0 sinθ

0 1 0−sinθ 0 cosθ

Substituer Y à X et Z à Y

Substituer Z à X et X à Y (attentionaux signes)

I La rotation autour d’un axe de vecteur u quelconque est un peu plus laborieuse à exprimer.

Avec c = cos(θ) , s = sin(θ) et u = (ux ,uy ,uz) normé. u2x +(1−u2

x )c ux uy (1− c)−uzs ux uz(1− c)+uy sux uy (1− c)+uzs u2

y +(1−u2y )c uy uz(1− c)−ux s

ux uz(1− c)−uy s uy uz(1− c)+ux s u2z +(1−u2

z )c

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 20 / 66

Page 21: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Rotation en coordonnées homogènes

I On ajoute une ligne et une colonne par rapport à la matrice 3D :

RH =

(R3D 0

0 1

)I P′ = RP

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 21 / 66

Page 22: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Exemple : rotation d’axe z

I Avec un objet défini localement dans le repère 2 :

P1 =M1→2P2 avec M1→2 =R (matrice de rotation homogène du transparent précédent)

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 22 / 66

Page 23: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Exemple : rotation d’axe quelconque

I Avec un objet défini localement dans le repère 2 :

P1 =M1→2P2 avec M1→2 =R (matrice de rotation homogène du transparent précédent)

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 23 / 66

Page 24: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Scale (transformation)

Changement d’échelle de rapport k .

� x ′ = kx

y ′ = kyz ′ = kz

peut être défini pour chaque coordonnée :

x ′ = kx xy ′ = ky yz ′ = kzz

P ′=SP avec S =

kx 0 00 ky 00 0 kz

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 24 / 66

Page 25: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Scale en coordonnées homogènes

S =

kx 0 0 00 ky 0 00 0 kz 00 0 0 1

�� ��P ′ = SP

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 25 / 66

Page 26: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Scale (changement de repère)

I Avec un objet défini localement dans le repère 2 :

P1 = M1→2P2 avec M1→2 = S (matrice de scale homogène du transparent précédent)

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 26 / 66

Page 27: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Composition

I La composition de changements de repères successifs se traduit par une unique matriceobtenue par le produit des matrices de chaque changement de repère.

Mi→j = Mi→k Mk→j

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 27 / 66

Page 28: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Composition (exemple)

I M1→2 = translation en x et y (2 placé par rapport à 1)

I M2→3 = rotation (bien noter : 3 placé par rapport à 2 ; donc de centre l’origine de 2).

I M3→4 = translation de vecteur (2,0,0) (4 placé par rapport à 3 ; donc déplacement sur l’axex de 3).

M1→4 = M1→2M2→3M3→4

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 28 / 66

Page 29: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Commutation

M1→3 = TR M1→3 = RT

M1→3 = RS M1→3 = SR

(Attention au scale !)

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 29 / 66

Page 30: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Composition rigide

I Un objet 3D (sans changement d’échelle) peut être placé par une composition quelconquede translations et de rotations (n’importe quel ordre).

I Cette composition est équivalent à une simple composition TR (T = une translation, R =une rotation)

I La matrice d’une telle composition sera alors sous la forme :

TR =

(R3D T3D

0 1

)(i.e. la rotation sur la partie 3x3 supérieure gauche et la translation en dernière colonne).

I un placement TR est appelé transformation rigide.

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 30 / 66

Page 31: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Positions et Directions

I Attention ! ! ! une direction ne subit pas les translations.

I En coordonnées homogènes : soit u =−→AB (coordonnée w = 0)et M1→2 une translation

alors :u1 = M1→2u2

et on obtient bien u2 = u1

I mais attention au code qui manipule les données 3D (non homogènes). Exemple :

Vector3 a , b ;Transform m; / / peu importe l e code : mat r ice homogène ou aut reb=m. t ransform ( a ) / / VECTEUR ou POINT ????? ( r é s u l t a t d i f f é ren t ) ./ / l a l i b r a i r i e 3D d e v r a i t d i f f é r e n c i e r . Par exemple : m. t rans fo rmPos i t i on ( a ) e t m. t r ans fo rmD i rec t i on ( a )/ / mais n ’ o f f r e souvent que m. t rans form ( a ) pour les POINTS 3D ( comment a l o r s o b t e n i r une t rans fo rma t i on de vecteur 3D ?)

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 31 / 66

Page 32: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Changements inverses

I L’inverse de M1→2 (notée M−11→2) permet d’obtenir M2→1

I Inverse d’un produit de matrices : (M1M2M3)−1 = M−1

3 M−12 M−1

1 (attention à l’ordre !)

I Inverse d’une composition de changements de repères :(M1→2M2→3M3→4)

−1 = M4→3M3→2M2→1

I Dans le cas général l’inversion consiste à résoudre MM−1 = I (pivot de gauss, par calculde déterminant, ...),

I Mais l’inverse s’obtient aisément pour les transformations usuelles :

• La translation inverse de T est la translation de vecteur opposé −T .• La rotation inverse de Rθ est la rotation d’angle opposé R−θ

• Le changement d’échelle inverse de S(kx ,ky ,kz) est S( 1kx, 1

ky, 1

kz).

• L’inverse de toute matrice orthonormale (matrice 3×3 de rotation par exemple)s’obtient en la transposant : a0 b0 c0

a1 b1 c1a2 b2 c2

−1

=

a0 a1 a2b0 b1 b2c0 c1 c2

si orthonormal

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 32 / 66

Page 33: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Changements de repère et application 3D

I Dans l’application on gère :

• Le placement des objets dans la scène se traduit par MWorld→Local (on place Localpar rapport à World).

• Le placement de la caméra dans la scène se traduit par MWorld→Eye (on place Eyepar rapport à World).

• Les objets pour lesquels les coordonnées des points PLocal sont données dansLocal.

I Pour la visualisation (OpenGL), il faut calculer PEye (pour ensuite calculer PClipCoordinates) :

• Il suffit d’appliquer PEye = MEye→Local PLocal• En décomposant : MEye→Local = MEye→World MWorld→Local• On dispose déjà de MWorld→Local , mais il faut inverser MWorld→Eye pour avoir

MEye→World : il reste alors à faire le produit.

I Ce calcul de MEye→Local est généralement assurée par l’application (et non par le vertexshader), et on donne à OpenGL (i.e. au vertex shader) cette matrice MEye→Local .

I La matrice MEye→Local est appelée MODELVIEW. (traditionnellement).

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 33 / 66

Page 34: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Traduction en OpenGL

I On fournira au vertex shader :

• l’attribut position exprimé dans le repère local (i.e. PLocal ).• la modelview (i.e. MEye→Local ).• la projection (i.e. MClipCoordinate→Eye).

I Vertex Shader :

l ayou t ( l o c a t i o n =0) i n vec3 p o s i t i o n ;. . .un i form mat4 p r o j e c t i o n ;uni form mat4 modelview ;. . .void main ( ) {. . .

g l _ P o s i t i o n = p r o j e c t i o n∗modelview∗vec4 ( pos i t i on , 1 . 0 ) ;}

I Application :

shader_ . uni form ( " modelview " , p3d : : modelview ) ; / / p3d : : modelview gé r ée par l ’ a p p l i c a t i o n ( v a r i a b l e " g loba le " )shader_ . uni form ( " p r o j e c t i o n " , p3d : : p r o j e c t i o n ) ; / / p3d : : p r o j e c t i o n gé r ée par l ’ a p p l i c a t i o n ( " g loba le " )glDraw . . .

I Souvent le produit projection*modelview est directement calculé par l’application etdonné au vertex shader ("traditionnellement" l’uniform correspondant est noté mvp)

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 34 / 66

Page 35: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Classe pour les matrices

I Nécessité d’une classe pour gérer les matrices homogènes dans l’application (dans lestps : Matrix4).

IMatr ix4 m1,m2,m3;Vector3 p1 , p2 , u1 , u2 ;. . .

m1=Matr ix4 : : i d e n t i t y ( ) ; / / i n i t i a l i s a t i o nm1. t r a n s l a t e ( x , y , z ) ; / / compose avec l a matr ice de t r a n s l a t i o n ( m u l t i p l i c a t i o n à d r o i t e )m1. r o t a t e ( angle , axisX , axisY , axisZ ) ; / / compose avec l a matr ice de r o t a t i o n ( angle en degré ) .m2=m1. inverse ( ) ; / / mat r ice inversem1=m2∗m3; / / p r o d u i tm1∗=m2; / / p r o d u i t ( i . e . m1=m1∗m2; a t t e n t i o n à l ’ ordre : m u l t i p l i c a t i o n à d r o i t e )p1 = m1. t rans fo rmPo in t ( p2 ) ; / / t r ans fo rma t i on d ’ un po in tu1 = m1. t r ans fo rmD i rec t i on ( u2 ) ; / / t r ans fo rma t i on d ’ une d i r e c t i o n ( i . e . vecteur ) .

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 35 / 66

Page 36: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Attention aux notations !

I Dans le code, la matrice de passage MRep1→Rep2 sera (généralement) représentée par lavariable rep1Rep2 (par exemple : worldLocal, eyeWorld, etc).

I Le nom de la variable indique bien le changement de repère et non la transformation.

I Par exemple, si vous connaissez un point P_World (en 3D) et que vous souhaitez leconnaitre dans le repère Eye (3D), il faut appliquerP_Eye=eyeWorld.transformPoint(P_World)

I Notez le transformPoint/transformDirection qui distingue points 3D et directions 3D

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 36 / 66

Page 37: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Exemple de code avec la modelview

I En décomposant avec world, eye et local :

wor ldLocal=Matr ix4 : : d e n t i t y ( ) ;worldEye=Matr ix4 : : i d e n t i t y ( ) ;

/ / placement de l ’ ob j e t par rappor t à wor ld : world−>l o c a lwor ldLocal . r o t a t e ( angle , 1 , 0 , 0 ) ;

/ / placement de l a caméra par rappor t à wor ld : world−>eyeworldEye . t r a n s l a t e ( 0 , 0 , 1 0 ) ;worldEye . r o t a t e ( 5 , 0 , 1 , 0 ) ;

/ / modelview = eye−>l o c a l = eye−>world ∗ world−>l o c a lp3d : : modelview = worldEye . inverse ()∗wor ldLocal ; / / no ter l ’ i n v e r s i o ndrawObject ( ) ; / / p3d : : modelview est passée au shader

I Avec uniquement la modelview (attention aux interprétations pour la caméra ! l’objet estplacé directement par rapport à la caméra ; à proscrire pour des positionnements pluscomplexes) :

p3d : : modelview . s e t I d e n t i t y ( ) ;/ / placement de l a caméra : eye−>worldp3d : : modelview . r o t a t e (−5 ,0 ,1 ,0) ;p3d : : modelview . t r a n s l a t e (0 ,0 ,−10);/ / t r a d u c t i o n du placement de l ’ ob j e t : world−>l o c a lp3d : : modelview . r o t a t e ( angle , 0 , 1 , 0 ) ;drawObject ( ) ; / / p3d : : modelview est passée au shader

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 37 / 66

Page 38: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

3 Conception hiérarchique

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 38 / 66

Page 39: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Conception hiérarchiqueI On peut généraliser l’approche de placer les objets par rapport au monde, en les plaçant les uns par rapport aux

autres :

I Le positionnement relatif des repères peut se représenter sous forme d’arbre :

• Chaque branche se traduit par un changement de repèreMparentNode→childNode

• Chaque sous-arbre est conçu indépendamment de son parent(i.e. on associe à chaque noeud un drawNode sans sepréoccuper du noeud parent).

• On remarque que les deux roues sont identiques dans leursrepères locaux (ce sera donc la même procédure qui tracera lesdeux roues).

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 39 / 66

Page 40: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Traduction de la hiérarchie en OpenGL

I La matrice p3d::modelview=MEye→Local indique dans quel repère Local on se trouve(i.e. le repère courant).

I Descendre dans l’arbre consiste à changer le repère courant (on applique le passage dunoeud à son fils).

I Lorsqu’un noeud a plusieurs enfants (tous placés par rapport au parent) : on doitmémoriser le repère du parent.

I Eviter de faire des inversions⇒ préférer mémoriser les repères.

I ⇒ utilisation d’une pile pour mémoriser p3d::modelview (i.e.p3d::modelview.push(); p3d::modelview.pop()).

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 40 / 66

Page 41: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

L’exemple

p3d::modelview.apply(R1,R2) est du pseudo code : correspond à une suited’instructions (translate, rotate, etc) qui modifie la modelview pour traduire lechangement de repère de R1 à R2 :

void drawWheel ( ) { / / repère l o c a l à une rouep3d : : modelview . push ( ) ; / / par pré caut ion ( i n u t i l e i c i ) .drawSquare ( ) ;p3d : : modelview . pop ( ) ;

}

void drawCar ( ) { / / repère l o c a l à une v o i t u r ep3d : : modelview . push ( ) ;

/ / MODELVIEW = M_Eye_Car ( Repere courant = Vo i tu re )drawBody ( ) ;

p3d : : modelview . push ( ) ;p3d : : modelview . apply ( Car , Wheel1 ) ; / / MODELVIEW ∗= M_Car_Wheel1/ / i . e . Repère courant = Wheel1drawWheel ( ) ;p3d : : modelview . pop ( ) ; / / on r e v i e n t à Car : MODELVIEW = M_Eye_Car

p3d : : modelview . apply ( Car , Wheel2 ) ; / / MODELVIEW ∗= M_Car_Wheel2 ;/ / i . e . Repère courant = Roue2drawWheel ( ) ;p3d : : modelview . pop ( ) ;

}

void drawScene ( ) {p3d : : modelview . s e t I d e n t i t y ( ) ;p3d : : modelview . apply ( Eye , World ) ; / / camérap3d : : modelview . apply ( World , Car ) ; / / ob j e tdrawCar ( ) ;

}

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 41 / 66

Page 42: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

A noter

I Remarquez que c’est le noeud père (le draw appelant) qui place ses fils (les drawappelés). Par exemple : c’est la voiture qui place les roues (et non les roues qui se placentelle mêmes par rapport à la voiture) ; c’est le monde qui place la voiture ; etc.

I Remarquez les push/pop systématiques à l’entrée/sortie des draw : permet d’éviter touteffet de bord (aucun noeud fils doit modifier le repère courant d’un noeud après son appel).

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 42 / 66

Page 43: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Attention au Scale !

I Comparez le résultat de :

p3d : : modelview . s e t I d e n t i t y ( ) ;p3d : : modelview . r o t a t e ( angle , 0 , 0 , 1 ) ;p3d : : modelview . scale ( 2 , 1 , 1 ) ;drawSquare ( ) ;

I et

p3d : : modelview . s e t I d e n t i t y ( ) ;p3d : : modelview . scale ( 2 , 1 , 1 ) ;p3d : : modelview . r o t a t e ( angle , 0 , 0 , 1 ) ;drawSquare ( ) ;

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 43 / 66

Page 44: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Conception hiérarchique : résumé

I Concevoir les composants dans des repères locaux les plus simples (ou intuitifs) possibles.

I Assembler les composants hiérarchiquement (sous forme d’arbres), en les positionnantrelativement les uns par rapport aux autres (on place les enfants par rapport au parent parun changement de repère MparentNode→childNode).

I Le principe de la conception hiérarchique est fondamentale et constitue la fondation de lamajeure partie des librairies 3D (graphes de scène).

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 44 / 66

Page 45: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

4 Quelques changements de repèresusuels

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 45 / 66

Page 46: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

123

1

2 3

M 13M 12

?

I On connait M1→2 et M1→3, quelle est la matrice M2→3 ?

I Solution : M2→3 = M2→1M1→3 (il reste à inverser M1→2 pour avoir M2→1).

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 46 / 66

Page 47: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Transformation exprimée dans un autre repère

I On connait M1→2, et on connait la translation t exprimée dans 1 (de matrice T1). Onsouhaite appliquer t1 sur 2. Quel est le passage M2→2′ ?

I Plusieurs approches possibles :

• Exprimer le vecteur t1 dans 2 : t2 = M2→1t1 pour pouvoir construire la matrice detranslation T2 ⇒ M2→2′ = T2.

• On "attache" 2 à 1, puis on "bouge" 1 de t1 sur 1′ : M2→2′ = M2→1M1→1′M1′→2′

(avec M1′→2′ = M1→2 car repères "attachés")⇒ M2→2′ = M2→1T1M1→2

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 47 / 66

Page 48: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Transformation exprimée dans un autre repère

I Exemple : rotation R2 du repère 1 pour obtenir 1′ (rotation exprimée dans 2).

I Approche possible : “attacher” le repère 1 au repère 2.

I ⇒M1→1′ = M1→2M2→2′M2′→1′

I avec M2→2′ = R et M2′→1′ = M2→1 (repères "attachés")

I�� ��⇒M1→1′ = M1→2RM2→1

I Rotation de 1 autour d’un point quelconque : prendre M1→2 la plus simple possible(translation).

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 48 / 66

Page 49: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Passage orthonormé

I Soient 1 = (O(1), i(1), j(1),k(1)) et 2 = (O(2), i(2), j(2),k(2)), deux repères orthonormés.On connait les expressions de l’origine et de la base de 2 dans le repère 1.

Alors :

M1→2 =

(i(2)1 j(2)1 k(2)1 O(2)

10 0 0 1

)I L’inverse M2→1 ? il suffit de faire comme pour (TR)−1 : transposer le bloc haut-gauche

(c’est une rotation) et d’opposer le bloc haut-droit (c’est une translation) et faire le produitdes inverses.

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 49 / 66

Page 50: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

LookAt

Placer la caméra par rapport à World en donnant sa position AWorld , quel point elleregarde (point AtWorld ) et son roulis par un vecteur UpWorld .

I Construire (i, j,k) :

• k est donné par k = O−At , et on le normalise.• i est tel que i = up× k• enfin j est calculé par j = k× i• La matrice MWorld→Eye est donnée en mettant en colonne i , j , k et O (repère étant

orthonormé).

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 50 / 66

Page 51: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

5 Changement de repères et éclairage

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 51 / 66

Page 52: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Calcul dans le repère Eye

I Pour un calcul cohérent, il faut que toutes les données nécessaires (N, position dessources, L, ...) soient exprimées dans le même repère.

I ⇒ transformation des normales :

void main ( ) {vec4 pos i t ionEye=modelviewMatr ix∗vec4 ( pos i t i on , 1 . 0 ) ;vec4 normalEye=modelviewMatr ix∗vec4 ( normal , 0 . 0 ) ; / / a t t e n t i o n ! c f t ransparen t qu i s u i t

L= l i g h t P o s i t i o n−pos i t ionEye . xyz / pos i t ionEye .w;N=normalEye . xyz ;. . .

g l _ P o s i t i o n = p r o j e c t i o n∗pos i t ionEye ;}

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 52 / 66

Page 53: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Attention au Scale ! (encore)

I Transformation des normales incorrecte lors d’un changement d’échelle.

avant transformation après transformation par modelview

I La matrice correcte pour transformer les normales est (M−1)t où M est la sous-matrice3x3 (3 premières lignes, 3 premières colonnes) de modelview.

I Il faut donc passer une matrice supplémentaire :

vec4 pos i t ionEye=modelviewMatr ix∗vec4 ( pos i t i on , 1 . 0 ) ;vec3 normalEye=normalMatr ix∗normal ;

L= l i g h t P o s i t i o n−pos i t ionEye . xyz / pos i t ionEye .w;N=normalEye ;. . .

g l _ P o s i t i o n = p r o j e c t i o n∗pos i t ionEye ;

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 53 / 66

Page 54: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

6 Représentation des changements derepères par TRS - Quaternions

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 54 / 66

Page 55: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Représenter la conception hiérarchique

I Représenter explicitement la hiérarchie par un arbre (graphe de scène).

class Object3D {Matr ix4 parentCh i ld_ ; / / changement de repère

Object3D ∗parent_ ; / / r é f érence sur l e noeud parentstd : : vector <Object3D ∗> c h i l d _ ; / / noeuds enfants

public :. . .v i r t u a l void draw ( ) = 0 ; / / i n t e r f a c e : t race dans l e repère l o c a l. . .

} ;

I Le visualiseur ("renderer") se charge de parcourir tout l’arbre en composant la modelviewet en traçant les géométries à chaque noeud (+ gestion des shaders/textures/etc).

I Offrir toutes les méthodes de positionnement et de changements de repères nécessaires.Ex : translate (par rapport au local ou au parent) ; rotate (idem) ; matrice worldLocal ;localWorld ; pointToWorld(PLocal) ; directionToWorld(ULocal) ; etc ; etc.

I On fera plus simple lors des TPs : uniquement un niveau.

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 55 / 66

Page 56: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

TR(S)

I Si les matrices homogènes s’imposent (composition simple par produit, librairie OpenGL),la représentation du placement est souvent couplée à une représentationTranslation/Rotation.

I Tout placement d’un objet rigide (composition de translations et rotations) peut se réduire àTR : c’est à dire une translation (c’est la position de l’objet) et une rotation (c’estl’orientation de l’objet).

I On peut éventuellement compléter par un changement d’échelle S pour contrôler lesdimensions d’un objet.

class Object3D {Vector3 po s i t i o n _ ; / / TQuaternion o r i e n t a t i o n _ ; / / RVector3 scale_ ; / / S. . .

} ;

I Quaternion?

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 56 / 66

Page 57: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Représentation d’une orientation

I Plusieurs choix pour représenter l’orientation :

• matrices (quel est l’axe? l’angle? ; erreurs numériques lors de compositionsmultiples ; interpolation M = (1−λ)M1+λM2).

• angle/axe : intuitif mais pas nécessairement évident à manipuler (composition)• angles de Cardan ("abusivement" appelés angles d’Euler en informatique graphique).• quaternions.

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 57 / 66

Page 58: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Remarques sur angles d’Euler

⇒ M0→3 = RZ0RY1RX2 (ordre Z −Y −X ).

r o t a t i o n ( bleu ) ; / / l a c e t ( yaw)r o t a t i o n ( rouge ) ; / / tangage ( p i t c h )r o t a t i o n ( v e r t ) ; / / r o u l i s ( r o l l )

Remarque : en informatique graphique, l’ordre des axes est généralement Y −X −Z :autour de y (= lacet), puis autour de x (= tangage), puis autour de z (= roulis).

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 58 / 66

Page 59: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Représentation par angles d’Euler (2)

class Object3D {Vector3 p o s i t i o n _ ; / / p o s i t i o n en t r a n s l a t i o ndouble ay_ , ax_ , _az_ ; / / o r i e n t a t i o n ( angles d ’ Euler ). . .

}

méthode draw :p3d : : modelview . t r a n s l a t e ( p os i t i on _ . x ( ) , p os i t i on _ . y ( ) , p os i t i on _ . z ( ) ) ;p3d : : modelview . r o t a t e ( ay_ , 0 , 1 , 0 ) ; / / yaw : autour de yp3d : : modelview . r o t a t e ( ax_ , 1 , 0 , 0 ) ; / / p i t c h : autour de xp3d : : modelview . r o t a t e ( az_ , 0 , 0 , 1 ) ; / / r o l l : autour de z. . .

I Représentation peut sembler simple : 3 angles, et l’orientation totale est alors donnée parM = RY0 RX1 RZ2 , mais la composition pose un véritable problème de conception :

• Comment composer par rapport à l’orientation actuelle? (exemple de l’interaction à lasouris : comment faire un yaw après un pitch??).

• Gimbal lock : possible de perdre un degré de liberté.

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 59 / 66

Page 60: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Gimbal Lock

r o t a t i o n ( bleu ) ; / / yawr o t a t i o n ( rouge ) ; / / p i t c hr o t a t i o n ( v e r t ) ; / / r o l l

rouge = 90 degrés

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 60 / 66

Page 61: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Représentation d’une orientation par quaternion (1)

I Définition : q = (a,u) avec a un scalaire de IR, et u un vecteur de IR3 (donc 4 composantesen tout).

I Un vecteur u peut s’écrire avec le quaternion q = (0,u).

I Somme : q1 +q2 = (a,u)+(b,v) = (a+b,u+ v).

I Multiplication : q1q2 = (a,u)(b,v) = (ab−u · v ,u× v +av +bu)

I Conjugué : (a,u)∗ = (a,−u)

I Multiplication par un scalaire : kq = k(a,u) = (ka,ku)

I Norme : ‖q‖=√

a2 +u ·u

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 61 / 66

Page 62: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Représentation par quaternion (2)

I Calcul à partir de 2 vecteurs : u et v unitaires, et formant un angle θ alors le quaternionq = (u · v ,u× v) est une représentation d’une rotation de vecteur u× v et d’angle 2θ.

I Tout quaternion normé s’écrit q = (cosα,sinαu) avec u normé : représente une rotationd’angle 2α et de vecteur u (axe passant par l’origine).

I Soit q un quaternion représentant une rotation, alors l’image w ′ du vecteur w s’obtient parw ′ = qwq∗

I Soient q1 et q2 deux rotations, alors la rotation composée est q1q2.

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 62 / 66

Page 63: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Conversion quaternion en matrice

I Soit q = (a,u) = (a,(x ,y ,z)) une rotation, alors la matrice homogène de rotation est :

1−2y2 −2z2 2xy−2za 2xz +2ya 0

2xy +2za 1−2x2 −2z2 2yz−2xa 02xz−2ya 2yz +2xa 1−2x2 −2y2 0

0 0 0 1

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 63 / 66

Page 64: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Intérêt des quaternions

I représentation de la composition moins gourmande en temps de calcul (comparer à lamultiplication entre matrice).

I composition des rotations plus robuste : il suffit de normaliser le quaternion pour s’assurerque nous avons toujours une rotation.

I interpolation : l’interpolation linéaire de deux quaternions donne un résultat plus naturelqu’avec les matrices (i.e. q3 = (1−λ)q1+λq2, mais il faut toutefois normaliser q3).

Remarque : l’attribut position_ est également interpolé liné[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 64 / 66

Page 65: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Classe Quaternion

I La classe Quaternion est disponible pour les tps.

I Les méthodes utiles sont :

• Initialisation à la rotation identité : q.setIdentity()• Conversion d’une représentation (angle,axe) à un quaternion :

q.setFromAngleAxis(angle,axe) (axe de type Vector3)• Conversion d’un quaternion à une représentation (angle,axe) :

q.copyToAngleAxis(&angle,&axe)• Composition de 2 rotations : q3=q1*q2• Composition avec une rotation représentée par (angle,axe) : q.rotate(angle,axe)

(q est modifié)• Rotation d’un vecteur : v=q*u (avec u et v de type Vector3)

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 65 / 66

Page 66: Modélisation 3D et Synthèse - FIL Lille 1aubert/m3ds/m3ds... · 2020-02-05 · I On connait le point P(x;y z) donné dans un repère 1 et on déplace le point P en P0par la translation

Transformation position ou direction

I Il faut différencier les points P(x ,y ,z) et les directions u(x ,y ,z) lors des transformations.Une direction ne doit pas subir la translation :

• Avec les matrices homogènes : appliquer une coordonnée homogène 0 pour lesvecteurs suffit.

• Avec une représentation translation/rotation (quaternion par exemple) : la directionsubit uniquement la rotation (il faut donc explicitement ignorer la translation).

[email protected] M3DS/ 3 - Changements de repères Master Informatique2019-2020 66 / 66