P1C3 - Transformations géométriques Flashcards Preview

SY32 > P1C3 - Transformations géométriques > Flashcards

Flashcards in P1C3 - Transformations géométriques Deck (31)
Loading flashcards...
1

Repères

objet, scène, observateur (caméra), écran
Repère indirect/direct (lié à l'observateur)
direct -> z vers l'arrière, y haut tete, x bras droit

2

Coordonnées cartésiennes/sphériques

x=RcosΦcosΘ
y=RcosΦsinΘ
z=RsinΦ

R=√(x²+y²+z²)
Θ=atan(y/x)
Φ=atan(z/√(x²+y²))

3

Transformation

X'=MX ->besoin de coordonnées homogènes pour translation

4

Coordonnées homogènes

à tout point (x,y,z) on fait correspondre (h1,h2,h3,s)
- h1 = s.x, h2=s.y, h3=s.z (s facteur d'échelle)
- s=0 -> point à l'infini

5

Translation

1 0 0 xt
0 1 0 yt
0 0 1 zt
0 0 0 1

6

Changement d'échelle

ex 0 0 0
0 ey 0 0
0 0 ez 0
0 0 0 1

7

Symétrie par rapport à un plan (xz)

1 0 0 0
0 -1 0 0
0 0 1 0
0 0 0 1
(identité avec -1 à l'axe normal)

8

Rotation (x,⍺)

1 0 0 0
0 cos⍺ -sin⍺ 0
0 sin⍺ cos⍺ 0
0 0 0 1

9

Rotation (y,⍺)

cos⍺ 0 sin⍺ 0
0 1 0 0
-sin⍺ 0 cos⍺ 0
0 0 0 1

10

Rotation (z,⍺)

cos⍺ -sin⍺ 0 0
sin⍺ cos⍺ 0 0
0 0 1 0
0 0 0 1

11

Composition des transformations

De droite à gauche
1. Mise à l'échelle
2. Rotation
3. Translation

12

Rotation d'un objet en (a,b,c) autour d'un axe // à l'axe x

M = T(a,b,c).R(x,⍺).T(-a,-b,-c)
(commence par une translation au centre)

13

Transformation de coordonnées (ex: polarview)

à voir

14

Repère observateur openGL

matrice ModelView (combine déplacement de scène et position de l'observateur)

15

Transformations openGL

glTranslate( ), glRotate( ), glScale( )
glPushMatrix( ), glPopMatrix( ), glLoadMatrix( )
Attention : produit de matrice à droite, ordre inversé
(1. Translation, 2. Rotation, 3. Echelle)

16

Types de projections

Non planaire (perspectives 1/2/3 pts de fuite), planaires (parallèles obliques, orthogonales)

17

Projection perspective

Centre de projection = position de l'observateur
Plan de projection ⏊ -Z (axe de visée de l'observateur)
Soit P(x0,y0,z0), thalles xe/d=x0/z0 et ye/d=y0/z0
Donc xe=x0/z0 *d, ye=y0/z0 *d

18

Projection parallèle

xe=x0, ye=y0

19

OpenGL

Matrice GL_PROJECTION
glFrustum(left, right, bottom, top, zNear, zFar)
gluPerspective(angleFovy, ratio, zNear, zFar)
glOrtho(left, right, bottom, top, zNear, zFar)

20

Fenetre

W Domaine à visualiser (points W1 et W2 bas gauche/haut droit)

21

Clôture

V Zone où sera projeté le contenu de la fenêtre (V1 V2)

22

Passage fenêtre-clôture d'un point R de W en un point E de V

xe=(xr-xw1)/(xw2-xw1) * (xv2-xv1) + xv1
ye=(yr-yw1)/(yw2-yw1) * (yv2-yv1) + yv1

23

OpenGL fenêtrage/cadrage

glViewport( )
(zone où sera affichée l'image)

24

Fenêtrage

2D ou 3D (volume de vision), élimination des parties de la scène non visualisées avant de faire tous les calculs (suivant position de l'observateur, ou encore objets éloignés trop petits)

25

Algorithme de Cohen-Sutherland

1. Affecter un code de 6 bits à chaque extrémité du segment (extrémité à gauche du volume, à droite du volume, en dessous, au dessus, devant, derrière)
2. Classer les segments :
- si code1=000000 et code2=000000 visible totalement
- sinon si (code1 et code2 ≠ 000000) invisible
- - sinon potentiellement partiellement visible
3. Examiner les segments restants :
- calcul d'intersection du segment avec le plan du volume concerné et refaire 1/2

26

Volume de vision parallélépipédique

sur plan (h,w // centre)
x=-w/d *z, x=w/d *z (projections plans gauche/droite)
y=h/d *z, y=-h/d *z (projections plans sup/inf)
plan avant : z=zavant, plan arrière z = zarriere

27

Elimination des faces arrières

Si objets convexes à facettes planaires
si V.n < 0 alors invisible (v dans le sens de z)

28

Algorithme du peintre

Dans l'espace objet, n objets O(n²)
- élimination faces arrières
- tri selon zmin
- étude des chauvauchements en x,y,z
- affichage dans l'ordre des faces

29

Algorithme du Z-buffer

Dans l'espace image, n objets p pixels O(np)
Tampon écran de la taille de l'image, on stocke les profondeurs de chaque pixel représentant la scène. Ordre des polygones sans importance.

Initialiser Zbuffer valeur minimum, videoBuffer à la couleur de fond
Supprimer les faces arrières
Pour chaque polygone:
- pour chaque pixel (x,y) du polygone:
- calculer la profondeur z(x,y) du pixel
- si z(x,y) > Zbuffer(x,y) //objet plus proche
- écrire les attributs du polygone dans la mémoire image et remplacer Zbuffer(x,y) par z(x,y)

30

Trouver z en tout point d'un polygone

- projection parallèle :
z = -(Ax+By+D)/C ou encore (balayage simplifié)
si z0=(x,y), (x+l,y)=z0 - 1/C
(avec A, B, C, D trouvés par la normale AC^AB)
- projection perspective :
f : distance de l'écran à l'observateur
z = - Df / (Ax + By +Cf)