G´en´eralit´es Pipeline Graphique

OpenGL Pipeline Graphique

R´emi Synave ([email protected])

ENSEIRB

2009-2010

R´emi Synave OpenGLPipeline Graphique 1 G´en´eralit´es Pipeline Graphique OpenGL, c’est quoi?

Ensemble de fonctions regroup´ees dans une biblioth`eque permettant de manipuler la carte graphique Biblioth`eque ´ecrite en C API multi-plateforme Permet de visualiser une sc`ene 3D (et aussi 2D) complexe `a partir de primitives simples

R´emi Synave OpenGLPipeline Graphique 2 G´en´eralit´es Pipeline Graphique OpenGL, c’est quoi?

Biblioth`eque ind´ependante du mat´eriel utilis´e Sp´ecifications ´evoluent en fonctions du comit´eARB Aujourd’hui, support´ee par toutes les cartes graphiques

R´emi Synave OpenGLPipeline Graphique 3 G´en´eralit´es Pipeline Graphique Historique

Ann´ees 80 : SGI IRIS GL Biblioth`eque cr´e´ee par (SGI) en 1992 : OpenGL 1.0 Cr´eation du standard et des sp´ecifications Machine `a´etats 1993 : premi`ere carte graphique supportant OpenGL 1.0 (station Silicon Graphics Iris 4D/510 Crimson VGXT) 1995 : DirectX/Direct3D 1.0 1999 : 1er pipeline mat´eriel grand public : NVIDIA Geforce ... Aoˆut 2008 : sp´ecifications officielles d’OpenGL 3.0

R´emi Synave OpenGLPipeline Graphique 4 G´en´eralit´es Pipeline Graphique Machines SGI

IRIS = Integrated Raster Imaging System Syst`eme d’exploitation : IRIX (IRIS UNIX)

SGI Indigo

R´emi Synave OpenGLPipeline Graphique 5 G´en´eralit´es Pipeline Graphique Machines SGI

SGI Indy

R´emi Synave OpenGLPipeline Graphique 6 G´en´eralit´es Pipeline Graphique Machines SGI

SGI Onyx

R´emi Synave OpenGLPipeline Graphique 7 G´en´eralit´es Pipeline Graphique Machines SGI

SGI O2

R´emi Synave OpenGLPipeline Graphique 8 G´en´eralit´es Pipeline Graphique Machines SGI

SGI Octane

R´emi Synave OpenGLPipeline Graphique 9 G´en´eralit´es Pipeline Graphique Machines SGI

SGI Tezro

R´emi Synave OpenGLPipeline Graphique 10 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Pipeline g´en´eral

Pipeline graphique Chaîne de rendu

Données géométriques Assemblage des primitives

Rastérisation Élimination − Projection Échantillonnage

R´emi Synave OpenGLPipeline Graphique 11 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Donn´ees g´eom´etriques

Ensemble de maillages polygonaux ou de primitives : Polygones convexes Sph`ere Cube Tore Cˆone ...

R´emi Synave OpenGLPipeline Graphique 12 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Pipeline g´en´eral

Pipeline graphique Chaîne de rendu

Données géométriques Assemblage des primitives

Rastérisation Élimination − Projection Échantillonnage

R´emi Synave OpenGLPipeline Graphique 13 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Assemblage des primitives

Positionnement/animation des objets grˆace `ades translations et des rotations Utilisation des coordonn´ees homog`enes Repr´esentation des transformations sous forme de matrices

R´emi Synave OpenGLPipeline Graphique 14 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Coordonn´ees homog`enes

Coordonn´ees homog`enes =6 Coordonn´ees cart´esiennes Permet de d´efinir la position d’un point dans l’espace Ajout d’une composante (dimension) W =6 0 aux classiques (X , Y , Z) → (X , Y , Z, W )

Cart´esienne → Homog`ene (X , Y , Z) (X , Y , Z, 1)

Homog`ene → Cart´esienne X Y Z (X , Y , Z, W ) ( W , W , W )

Notation non unique : point(1, 2, 3, 1) = point(2, 4, 6, 2)

R´emi Synave OpenGLPipeline Graphique 15 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Coordonn´ees homog`enes

Pourquoi ? ? ! ! Permet de repr´esenter les rotations, translations et mises `a l’´echelle par une matrice Application de toutes ces transformations par des multiplications de matrices Combinaison de transformations repr´esent´ee par une seule matrice (multiplication des matrices de chaque transformation)

R´emi Synave OpenGLPipeline Graphique 16 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Coordonn´ees homog`enes

Matrices de rotation : 10 00 0 cos(α) −sin(α) 0 de αo suivant l’axe X : 0 sin(α) cos(α) 0   00 01 cos(α) 0 sin(α) 0  0 1 0 0 de αo suivant l’axe Y : −sin(α) 0 cos(α) 0    0 0 0 1

R´emi Synave OpenGLPipeline Graphique 17 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Coordonn´ees homog`enes

Matrice de rotation : cos(α) −sin(α) 0 0 sin(α) cos(α) 0 0 de αo suivant l’axe Z :  0 0 10    0 0 01 Matrice de translation : 1 0 0 Tx −→ 0 1 0 T  d’un vecteur T = (T , T , T ) : y x y z 0 0 1 T   z  000 1 

R´emi Synave OpenGLPipeline Graphique 18 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Assemblage des primitives

Utilisation des matrices en coordonn´ees homog`enes pour le positionnement des objets dans la sc`ene : la multiplication de deux matrices n’est pas commutative ! ! ! translation + rotation =6 rotation + translation rotation de 20o suivant X + rotation de 30o suivant Y =6 rotation de 30o suivant Y + rotation de 20o suivant X L’ordre d’application des transformations est important !

R´emi Synave OpenGLPipeline Graphique 19 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Assemblage des primitives Exemples : Point A(0, 1, 0) → rotation de 90o suivant X puis translation de (0, 2, 0). Point A(0, 1, 0) → translation de (0, 2, 0) puis rotation 90o suivant X. Point A(0, 1, 0) → rotation de 90o suivant Z puis rotation de 90o suivant Y. Point A(0, 1, 0) → rotation de 90o suivant Y puis rotation de 90o suivant Z.

Transformation affine d’un point P par une matrice M :

M1,1 M1,2 M1,3 M1,4 Px M M M M  P  2,1 2,2 2,3 2,4 . y M M M M  P   3,1 3,2 3,3 3,4  z  M4,1 M4,2 M4,3 M4,4  1 

R´emi Synave OpenGLPipeline Graphique 20 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Pipeline g´en´eral

Pipeline graphique Chaîne de rendu

Données géométriques Assemblage des primitives

Rastérisation Élimination − Projection Échantillonnage

R´emi Synave OpenGLPipeline Graphique 21 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Elimination´

Polygones invisibles : Polygones vus de l’arri`ere (orientation importante des polygones) : Back face culling Polygones se trouvant derri`ere un autre polygone depuis le point de vue de la cam´era : Z-buffer lors de la rast´erisation

R´emi Synave OpenGLPipeline Graphique 22 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Elimination´

Point de vue dans le mˆeme sens que la normale du polygone ? On le voit de derri`ere On le supprime Point de vue dans le sens oppos´e`ala normale du polygone ? Le polygone nous fait face On le conserve

R´emi Synave OpenGLPipeline Graphique 23 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Elimination´

P1 (−1,2)

p (3,0)

(2,1)

P2

−→ −→p .P1= −3 < 0 → on conserve le polygone P1 −→ −→p .P2 = 6 > 0 → on supprime le polygone P2

R´emi Synave OpenGLPipeline Graphique 24 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Elimination´

Elimination´ des polygones non visible Faible coˆut par polygone Suffisant pour les mod`eles num´eriques valides imprimables (mod`eles num´eriques sans bord) Etape´ pr´eliminaire pour d’autres algorithmes Economise´ 50% de temps de calcul (en moyenne)

R´emi Synave OpenGLPipeline Graphique 25 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Projection

Projection Orthogonale : Projection perpendiculaire au plan de projection

f

R´emi Synave OpenGLPipeline Graphique 26 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Projection

f

Consid´erons : Point de vue centr´een (0, 0, 0) Plan de projection d’´equation z = f 100 0 010 0 → Matrice de projection : 0 0 0 f    000 1

R´emi Synave OpenGLPipeline Graphique 27 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Projection

Projection Perspective : Projection en direction du centre de projection

f

R´emi Synave OpenGLPipeline Graphique 28 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Projection

f

Consid´erons : Point de vue centr´een (0, 0, 0) Plan de projection d’´equation z = f 10 0 0 01 0 0 → Matrice de projection : 00 1 0  1  0 0 f 0 R´emi Synave OpenGLPipeline Graphique 29 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Pipeline g´en´eral

Pipeline graphique Chaîne de rendu

Données géométriques Assemblage des primitives

Rastérisation Élimination − Projection Échantillonnage

R´emi Synave OpenGLPipeline Graphique 30 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Rast´erisation - Echantillonnage´

Passage d’une image vectorielle `aune image matricielle la sc`ene 3D `ades pixels Conversion de toutes les primitives vectorielles en images matricielles

R´emi Synave OpenGLPipeline Graphique 31 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Rast´erisation - Echantillonnage´

Z-buffer : Tampon de profondeur Gestion du probl`eme de visibilit´e Affichage des pixels des primitives les plus proches de la cam´era

R´emi Synave OpenGLPipeline Graphique 32 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Rast´erisation - Echantillonnage´

Z-buffer : Tableau de la taille de l’´ecran On stocke la valeur minimale pour chaque pixel et la couleur Initialisation de tous les pixels `a ∞ Projection de tous les polygones dans le tampon

R´emi Synave OpenGLPipeline Graphique 33 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Rast´erisation - Echantillonnage´

Exemple :

INF INF INF INF INF INF INF INF INF INF

INF INF INF INF INF INF INF INF INF INF

INF INF INF INF INF INF INF INF INF INF

INF INF INF INF INF INF INF INF INF INF

INF INF INF INF INF INF INF INF INF INF

INF INF INF INF INF INF INF INF INF INF

INF INF INF INF INF INF INF INF INF INF

R´emi Synave OpenGLPipeline Graphique 34 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Rast´erisation - Echantillonnage´

Exemple :

INF1 INF INF INF INF INF INF INF INF

INF 1 1 1 INF INF INF INF INF INF

INF 2 2 2 2 2 INF INF INF INF

INF 2 2 2 2 2 2 INF INF INF

INF 3 3 3 3 3 INF INF INF INF

INF 3 3 INF INF INF INF INF INF INF

INF INF INF INF INF INF INF INF INF INF

R´emi Synave OpenGLPipeline Graphique 35 Donn´ees g´eom´etriques G´en´eralit´es Assemblage des primitives Pipeline Graphique Elimination´ - Projection Rast´erisation - Echantillonnage´ Rast´erisation - Echantillonnage´

Exemple :

INF1 INF INF INF INF INF INF INF INF

INF 1 1 1 22 2 2 INF INF

INF 2 2 2 2 2 2 2 INF INF

INF 2 2 2 2 2 2 2 INF INF

INF 3 3 2 2 2 2 2 INF INF

INF 3 3 2 2 2 2 2 INF INF

INF INF INF INF INF INF INF INF INF INF

R´emi Synave OpenGLPipeline Graphique 36