• Aucun résultat trouvé

Introduction à la Synthèse d’images (3)

N/A
N/A
Protected

Academic year: 2022

Partager "Introduction à la Synthèse d’images (3)"

Copied!
28
0
0

Texte intégral

(1)

Introduction à la

Synthèse d’images (3)

Christophe Renaud Licence Informatique 3

Année universitaire 2020-2021

Version 1.0 du 18/05/2021

(2)

Plan du cours

1.

Introduction

2.

Modélisation d’objets 3D

3.

Rendu temps réel

4.

Introduction à OpenGL

5.

Transformations géométriques

6.

Modèles d’éclairage local

(3)

x y

z

O

Repère global

1. Objectifs

Déplacer les objets de leur repère de définition (repère local) vers leur

position dans la scène (repère global)

Animer les objets dans la scène

Exemples :

x z

y

x z

y

Repères locaux

(4)

2. Transformations usuelles

les translations

R R

n n

t : →

( )

13

t =

( ) y x ⎯→

t

P ( ) x y avec  y x = = x y + + t t

xy

P ' '

' '

2D :

'



 

+

= +

= = +

 

 

⎯→ 

 ⎯

 

z y t x

t z z y t y x x t z avec

x y z P

x y P

' ' ' ' ' '

'

3D :

(5)

Transformations usuelles

les changements d’échelle

R R

n n

s : →

( )

12

s =

1 3 2 6

( ) y x ⎯→ P ( ) x y avec  y x = = s s y x

P

y

s x

' ' ' '

2D :

'



 

= 

= = 

 

 

⎯→ 

 ⎯

 

z s

z s y y x s x z avec

x y z P

x y P

z y x s

' ' ' ' ' '

'

3D :

(6)

Transformations usuelles

les rotations 2D

R R

n n

R

,axe

: →

( ) =

= cos( sin( ) )

  L

y L P x

( ) = +

= sin( cos( ) ) cos( sin( ) ) ' '

'    

y

x x y

x y P

P P’

x y

O

L L

(7)

les rotations 3D

Rotation d’axe Oz :

Rotation d’axe Ox :

Rotation d’axe Oy :

Rotation d’axe quelconque :

- 3 rotations successives d’axe Ox, Oy, Oz - angles des rotations = angles d’Euler

x z

y

o

x z

y

o

x z

y

o

 

 

   + −  

 =

 

= 

z y x

y x

z x y

P sin( ) cos( )

) sin(

) cos(

' ' '

'    

 

 

 +

  − 

 =

 

= 

) cos(

)

sin( cos( ) sin( ) ' ' '

'    

z y y x z z

x y P

 

 

 +

= 

 

 

= 

) cos(

) sin(

) sin(

) cos(

' ' '

'  

z x x y z z

x y

P

(8)

Composition des transformations

Représentation matricielle

Toutes les transformations usuelles peuvent se représenter sous forme matricielle

Coordonnées homogènes

Application sous la forme : P’ = M.P

M = matrice de transformation

Composition de 2 transformations :

Écriture identique

Matrice M = produit des 2 matrices de

transformation à utiliser

(9)

Remarque importante

Le produit de 2 matrices de transformation doit être fait dans l’ordre inverse de l’ordre d’application des 2 transformations

Exemple : P ⎯ ⎯→

M1

P ' ⎯ ⎯→

M2

P "

P M

M P

M P

P M

P ' =

1

 " =

2

 ' =

2

1

• Rappel :

– Le produit de matrice n’est pas commutatif

=> composition non commutative

2 1 1 2

M M

M

M   

(10)

Exemple

90°

T(1,1) R90°,z

(11)

Avantage de la représentation matricielle

Une transformation doit, en général, être

appliquée sur de nombreux points de la scène

Si M = M

n

x M

n-1

x … x M

2

x M

1

On calcule une seule fois M

On applique M sur tous les points à transformer

Sans composition :

On applique n produits de matrice pour chaque point à transformer …

11

P(1) = M1xP P(2) = M2xP(1) P = M3xP(2)

P’=MxP

P’

P

(12)

Les projections

Transformations précédentes :

s’appliquent dans le repère de la scène

servent à configurer la scène

Visualisation :

à l’affichage, il faut générer une vue de la scène

=> projection des objets sur l’écran

dépend de plusieurs paramètres

type de projection

position de l’observateur

angle de vision (ouverture)

(13)

La projection perspective

Observateur à distance finie de l’écran

il existe un point de fuite

écran Observateur

(14)

Projections parallèles

Observateur à l’infini

pas de point de fuite

tous les points se projettent suivant la même direction

Deux types principaux

projection orthogonale

écran perpendiculaire à la direction de projection

projection oblique

écran incliné d'un angle  par rapport à la direction de projection

cas particulier :  = 45 ° (projection cavalière)

(15)

écran

(16)

3. Les transformations OpenGL

OpenGl utilise 3 transformations géométriques

successives pour afficher la scène 3D sur l’écran :

1. le déplacement des objets à la position que leur attribue le programme ;

2. la projection des objets sur l’écran ;

3. leur affichage dans la zone écran qui est attribuée à l'image (transformation en pixels).

Ces actions sont exécutées successivement au cours du pipeline graphique (pipeline de rendu)

A chaque étape correspond une matrice différente

Chacune des matrice est stockée dans le pipeline

graphique 16

(17)

Principe sous OpenGL

17

y

x

-z z

Par défaut, OpenGL considère que l’observateur (la caméra) est placé à l’origine du repère universel et qu’il regarde dans la

direction des z négatifs

Pour que l’observateur puisse voir le contenu de la scène, ce sont les objets qui sont déplacés …

(18)

Sélection d’une matrice

OpenGL gère plusieurs matrices de transformation géométrique

Il faut sélectionner celle que l’on souhaite modifier

À un instant donné, il n’existe qu’une seule matrice active dans le programme : la matrice courante

18

▪ Sélection d’une matrice de transformation : void glMatrixMode(GLenum mode);

GL_MODELVIEW GL_PROJECTION

Matrice de transformation

- utilisée pour modifier les objets Matrice de visualisation

- utilisée pour projeter les objets sur l’écran

(19)

Initialisation

La fonction suivante permet d’initialiser la matrice courante avec la valeur de la matrice identité :

void glLoadIdentity(void)

19

…glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

La matrice courante est réinitialisée avec les valeurs de la matrice identité.

La matrice courante devient la matrice de transformation.

On utilise alors les valeurs de

cette matrice qui ont été stockées précédemment dans le contexte graphique.

(20)

Les translations

Fonction :

glTranslatef(GLfloat tx, GLfloat ty, GLfloat tz)

Translation de vecteur (tx, ty, tz)

Multiplie la matrice de transformation courante par la matrice de translation correspondante

Exemples

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glTranslatef(2.0, 0.0, 0.0);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glTranslatef(2.0, 0.0, 0.0);

glTranslatef(3.0, 0.0, 0.0);

Tout ce qui suit sera translaté de 2 en x Tout ce qui suit sera translaté de 5 en x

(composition des 2 translations)

(21)

Schéma de l’exemple

21

y

x

-z z

glMatrixMode(GL_MODEL_VIEW);

glLoadIdentity();

glTranslatef(0.0, 0.0, -2.0);

glTranslatef(0.0, 0.0, -3.0);

O

O’

-2 O’’

-3 Repère dans lequel seront créés les objets 3D

après le glTranslatef(0.0, 0.0, -2.0);

Repère dans lequel seront créés les objets 3D après le glTranslatef(0.0, 0.0, -2.0); ET le glTranslatef(0.0, 0.0, -3.0);

(22)

Les rotations

Fonctions :

glRotatef(GLfloat alpha, GLfloat x, GLfloat y, GLfloat z);

Rotation

D’angle alpha (en degrés)

d’axe de vecteur directeur (x, y, z)

Multiplie la matrice de transformation courante par la matrice de rotation correspondante

Exemples :

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glRotatef(45.0, 1.0, 0.0, 0.0);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glRotatef(45.0, 1.0, 0.0, 0.0);

glRotatef(30.0, 0.0, 1.0, 0.0);

Tout ce qui suit sera tourné de 45° autour autour de l’axe Ox

Tout ce qui suit sera tourné de 45° autour de l’axe 0x, puis de 30° autour de Oy

(composition des 2 rotations)

(23)

Les mises à l’échelle

Fonctions :

glScalef(GLfloat sx, GLfloat sy, GLfloat sz);

Mise à l’échelle de facteurs sx, sy et sz

Multiplie la matrice de transformation courante par la matrice de mise à l’échelle correspondante

Exemples :

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glScalef(1.0, 2.0, 1.0);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glScalef(1.0, 2.0, 1.0);

glScalef(1.0, 3.0, 1.0);

Tout ce qui suit verra sa hauteur multipliée par 2 Tout ce qui suit verra sa hauteur multipliée par 6 (composition des 2 mises à l’échelle : 2.0 x 3.0 )

(24)

Les Projections perspectives (1)

void glFrustum(GLdouble gauche, GLdouble droite, GLdouble haut, GLdouble bas,

GLdouble avant, GLdouble arriere)

O gauche

droite haut

bas avant (distance œil / plan de clipping avant) arriere (distance œil / plan de clipping arrière)

(25)

Les Projections perspectives (2)

void gluPerspective(GLdouble angle, GLdouble aspect, GLdouble avant, GLdouble arriere)

O

w

h

aspect = w/h

avant

arriere Angle d’ouverture

dans le plan 0xz

] 0 . 180 , 0 . 0

[

Multiplie la matrice courante par une matrice de projection perspective, calculée en fonction des paramètres.

(26)

Exemples

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(60.0, 1.0, 1.0, 100.0);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(90.0, 1.0, 1.0, 100.0);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(30.0, 1.0, 1.0, 100.0);

(27)

Définir une zone d’affichage

OpenGL permet de restreindre la zone d’affichage à une sous-partie de la fenêtre d’affichage.

Fonction à utiliser :

void glViewPort(GLint xbas, GLint ybas,

GLsizei largeur, GLsizei hauteur);

Les paramètres représentent :

(xbas, ybas) : les coordonnées du coin inférieur gauche de la zone

largeur : la largeur de la zone

hauteur : la hauteur de la zone

Tous les paramètres sont exprimés en coordonnées pixel.

27

(28)

Exemple

28 0 1 2 3

0 123

largeur-1 hauteur-1

glViewPort(2, 1, 11, 6);

Origine du repère « pixel » OpenGL

Références

Documents relatifs

La matrice associée à un graphe orienté d'ordre n est une matrice carrée 1 2 de dimension n x n , où le terme de la i ième ligne et la j ième colonne est égal à 1. s'il existe

Calculer le d´ eterminant de A, puis conclure quant ` a son inversibilit´

Dans le cas où une matrice est diagonalisable, la trace est égale à la somme des valeurs propres (comptées autant de fois que la dimension des sous espaces propres associés) En

[r]

Le rang d’une matrice A ∈ M n,p ( K ) est le plus grand entier r tel qu’il existe un mineur d’ordre r extrait de A

Ici, au regard de la définition de la matrice M, on peut s’intéresser à la résolution d’un système en tirant parti de la structure en bloc de

Montrer que la classe de similitude de M est une quadrique affine d’un hyperplan affine de M 2 (R), que l’on d´eterminera suivant la diagonalisabilit´e de M

Expliciter la matrice DE ij , et en déduire que toutes les lignes, sauf la i -ème, de la matrice Φ(E ij ) sont nulles.. On montre de même que toutes les colonnes, sauf la j -ième, de