opengl (mesa) - la biblioth que standard...

88

Upload: others

Post on 07-Mar-2021

3 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)OpenGL (Mesa)La bibliothèque standard 2D/3DChristian NguyenDépartement d'informatiqueUniversité de Toulon et du Var23 novembre 2009Christian Nguyen OpenGL (Mesa)

Page 2: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Introdu tionOpenGL est devenu un standard graphique de fait ar il possède des apa ités graphiques avan ées asso iées à un modèle deprogrammation simple.Sa portabilité est assurée par le fait qu'il ne propose pas de pilotegraphique propre à haque plate forme. Il se présente omme unebibliothèque orientée uniquement vers la manipulation d'objets 3Det in orporable dans n'importe quel sous système fenêtré (XWindow, Windows NT) ou non.Ses spé i� ations sont adaptées aux ar hite tures graphiquesa tuelles Christian Nguyen OpenGL (Mesa)

Page 3: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)HistoriqueGKS : Graphi s Kernel System, bibliothèque 2D,PHIGS et PHIGS+ Programmer's Hierar hi al Intera tiveGraphi s System : basé sur GKS, standard ANSI.En apsulation de la des ription et des attributs d'objets 3Ddans une liste d'a� hage (display list. In onvénients :modi� ation de la stru ture très lourde, pas d'intégration deste hniques "avan ées" de rendu,PEX (PHIGS Extension to X), ajoute le rendu immédiat mais omporte les mêmes défauts que PHIGS+ en y ajoutantdi�érentes versions pas totalement ompatibles.OpenGL, réé au début des années 90 par Sili on Graphi s.Christian Nguyen OpenGL (Mesa)

Page 4: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Fon tionnalitésOpenGL propose des te hniques de rendu avan é, aussi bien enmode immédiat qu'au travers de listes d'a� hage (display list).Il se présente de la même façon que les autres bibliothèquesgraphiques, omme une interfa e logi ielle d'une ar hite turegraphique : plusieurs entaines de pro édures et fon tions despé i� ation et de manipulation d'objets 2D/3D ave leursattributs.L'a� hage omprend aussi bien X Window que d'autres interfa esgraphiques (telles que Windows NT).Christian Nguyen OpenGL (Mesa)

Page 5: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Fon tionnalitésOpenGL permet de onstruire des primitives dans la mémoire image(frame bu�er), dans un ertain mode.Toutes opérations (primitives, modes, ...) se fait par l'intermédiairede ommandes (sous la forme d'appels de pro édures ou defon tions).Le modèle d'interprétation des ommandes OpenGL est le modèle lient-serveur.Les primitives géométriques (points, segments, polygones) sontdé�nies par l'intermédiaire de sommets. Un ensemble de donnéesest asso ié à haque sommet : position, normale, ouleur ettexture. Chaque sommet est al ulé indépendamment.Christian Nguyen OpenGL (Mesa)

Page 6: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Fon tionnalitésOpenGL fournit un ontr�le dire t sur les opérations 2D/3Dfondamentales : matri es de transformation, oe� ients deséquations de la lumière, méthodes d'antialiasing, opérations de miseà jour des pixelsPar ontre, il n'existe au une fon tion permettant de modéliser lesobjets omplexes : l'ensemble des outils permet de dé rirel'apparen e de l'objet et non l'objet lui-même.Christian Nguyen OpenGL (Mesa)

Page 7: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)PortabilitéLes e�ets des ommandes sont ontr�lés en bout de haîne par lesystème de gestion de fenêtres :détermine les portions de la mémoire image a essible àOpenGL, ommunique la stru ture de ette portion à OpenGL,génère l'image sur l'é ran à partir de la mémoire image(in luant des transformations propres à la mémoire image telleque la orre tion gamma).L'initialisation du système graphique est onditionnée par elle dugestionnaire de fenêtre. Les entrées utilisateurs sont aussi à la harge du gestionnaire de fenêtres.Christian Nguyen OpenGL (Mesa)

Page 8: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)BibliothèquesPlusieurs bibliothèques sont développées à partir d'OpenGL a�nd'apporter des fon tionnalités non-disponibles dans la bibliothèqueOpenGL elle-même :GLU (OpenGL Utility Library) : dé omposition de polygones on aves,des ription et a� hage des ourbes et des surfa es NURBS, dé�nition desurfa es quadriques.GLUT (OpenGL Utility Toolkit) : jeu de routines pour la gestion des fenêtresOpenGL et les intera tions ave le système d'exploitation indépendamment de elui- i et du gestionnaire de fenêtres.GLUI (OpenGL User Interfa e Library) : bibliothèque en C++ qui permet de ompléter la bibliothèque de gestion de fenêtres OpenGL, GLUT (boutons, les ases à o her, . . .). Christian Nguyen OpenGL (Mesa)

Page 9: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)ImplémentationsPlusieurs implémentations d'OpenGL (exploitant l'a élération 3Dfournie par le matériel) existent pour Windows, de nombreusesstations Unix et Ma OS.Il existe une implémentation libre de ette bibliothèque, nomméeMesa, réée en 1993 par Brian Paul et qui utilise la même API, equi permet :de se passer de la li en e OpenGL dans la plupart des asde faire tourner des appli ations OpenGL sur des terminaux Xqui y sont en prin ipe inaptesChristian Nguyen OpenGL (Mesa)

Page 10: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Intérêt d'OpenGL pour SGISGI met à haque fois dans le domaine publi la version N-1 de GL,bibliothèque graphique de GL. Cette appro he marketingdé ourage la on urren e (OpenGL étant gratuit et ouvert,pourquoi développer autre hose ?)dissuade la modi� ation d'OpenGL ( ar tout ajout serait àre ommen er dans la version d'OpenGL suivante)donne aux stations SGI un avantage on urrentiel substantiel,puisque GL a toujours une longueur d'avan e sur OpenGL.Christian Nguyen OpenGL (Mesa)

Page 11: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)UtilisationsCertains logi iels utilisent OpenGL pour gérer l'ensemble de leur interfa e, même 2D, omme Blender,ou la version SGI de X11. Liste non-exhaustive de jeux vidéos utilisant OpenGL :Doom 3Half-LifeMedal of HonorNeverwinter NightsQuakeStar Wars : Knights of the Old Republi , Star Wars Jedi Knight : Jedi A ademy, Star Wars JediKnight II : Jedi Out astUnreal TournamentWar raft 3, World of War raftWolfenstein : Enemy TerritoryChristian Nguyen OpenGL (Mesa)

Page 12: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Le pipeline graphique d'OpenGLDisplay

List

EvaluatorPer−Vertex Operations

Primitive Assembly

Pixel Operations

Rasterization Per−Fragment Operations

Texture Memory

Frame Buffer

Sommets

Pixels Des opérations élémentairesChristian Nguyen OpenGL (Mesa)

Page 13: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Plan1 Sommets et primitives2 Couleurs et a� hage3 Visualisation4 Les listes d'a� hage5 Le réalisme6 Mélange, antialiasing et �ou7 Manipulation d'images8 Le �pipeline graphique� (III)Christian Nguyen OpenGL (Mesa)

Page 14: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Sommets et primitivesObjets Sommets généréspoint haque sommet donne la position d'un pointline strip liste de segments jointifsline loop omme line strip mais le 1er et le dernier sommet forment un segmentseparate line haque paire de sommets dé rit un segmentpolygon les sommets dé rivent un polygone onvexetriangle strip haque sommet suivant le 2ième dé rit un triangletriangle fan haque sommet suivant le 2ième dé rit un triangle ave le pré édent et le 1erpointseparate triangle haque triplet de sommets dé rit un trianglequadrilateral strip haque paire de sommets dé rit un quadrilatère ave la paire pré édenteindependent quad haque quadruplet de sommets dé rit un quadrilatèreChristian Nguyen OpenGL (Mesa)

Page 15: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Sommets et primitivesquadrilateral striptriangle fantriangle strip

0

1

2

3

4

0

12

3

4 2

3

4

0

5

1

Exemple :glBegin(GL_POLYGON)glVertex3i(0, 0, 0);glVertex3i(0, 1, 0);glVertex3i(1, 0, 1);glEnd(); Christian Nguyen OpenGL (Mesa)

Page 16: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Sommets et primitivesorientation

position

matrice identité

transformation

sommet/normale

luminosité

des coord. de texture

fonction de génération

coord. transformée

du sommet

coord. finale

de la texture

matrice de

texture

couleur courante

normale courante

1 sommet

texture courante

couleur finale

Asso iation des valeurs ourantes et d'un sommetChristian Nguyen OpenGL (Mesa)

Page 17: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Les polygonesDé�nition : alternan e de glNormal* et de glVertex* dans unglBegin/glEnd.Chaque normale doit être orientée vers l'extérieur de la surfa e.Remarque : glEnable(GL_NORMALIZE) ;Orientation des fa es ( ounter lo kwise ou CCW) :glFrontFa e(mode) ave mode = (CCW, CW).Christian Nguyen OpenGL (Mesa)

Page 18: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Les polygonesLes polygones ont deux fa es glPolygonMode(fa e, mode) ave fa e= (FRONT, BACK, FRONT_AND_BACK) et mode = (POINT,LINE, FILL),Elimination des fa es arrières par glCullFa e(mode) ave mode =(FRONT, BACK, FRONT_AND_BACK).Subdivision expli ite d'un polygone en polygones onvexes parélimination des arêtes indésirables : glEdgeFlag(GL_FALSE) ;.Christian Nguyen OpenGL (Mesa)

Page 19: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Plan1 Sommets et primitives2 Couleurs et a� hage3 Visualisation4 Les listes d'a� hage5 Le réalisme6 Mélange, antialiasing et �ou7 Manipulation d'images8 Le �pipeline graphique� (III)Christian Nguyen OpenGL (Mesa)

Page 20: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)La ouleurDé�nition (non modi�able) : quadruplets (R, V, B, A) ou table des ouleurs.Exemple : glColor3f(1.0, 0.0, 0.0) ;LUT : portage, peu de plans, olormap animation, . . .RVBA : texture, lumière, ombrage, �ou, antialiasing, mélange(blending), . . .Nombre de bits alloué à haque omposante ouleur :glGetIntegerv( omp oul) ave omp oul = (GL_RED_BITS, ...,GL_INDEX_BITS).Tramage (dithering) : glEnable(GL_DITHER); ( f. double-bu�er).Christian Nguyen OpenGL (Mesa)

Page 21: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)A� hageOpenGL travaille par défaut en mode immédiat.L'initialisation se fait par glClear* :glClearColor(0, 0, 0, 0); // ouleur de fondglClearDepth(0); // profondeur par defautglClear(GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT);ATTENTION : réinitaliser le Z-bu�er entre haque hangement devue par : glClear(GL_DEPTH_BUFFER_BIT) ;For er la �n d'un dessin : glFlush() ; (modèle lient-serveur).Christian Nguyen OpenGL (Mesa)

Page 22: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Dé rire une s ène#in lude <math.h>#in lude <stdio.h>#in lude <stdlib.h>#in lude "glut.h"GLfloat light_diffuse[℄ = { 1.0, 0.0, 0.0, 1.0 };GLfloat light_position[℄ = { 1.0, 1.0, 1.0, 0.0 };GLUquadri Obj* obj;void display(void){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glCallList(1); /* rendu de la display_list sphere */glutSwapBuffers();}void init(void){ obj = gluNewQuadri ();gluQuadri DrawStyle(obj, GLU_FILL);glNewList(1, GL_COMPILE);gluSphere(obj, 1.0, 20, 20);glEndList(); Christian Nguyen OpenGL (Mesa)

Page 23: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Dé rire une s èneglLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);glLightfv(GL_LIGHT0, GL_POSITION, light_position);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glEnable(GL_DEPTH_TEST);glMatrixMode(GL_PROJECTION);gluPerspe tive(40.0, 1.0, 1.0, 10.0);glMatrixMode(GL_MODELVIEW);gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);glTranslatef(0.0, 0.0, -1.0);}int main(int arg , har** argv){ glutInit(&arg , argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);glutCreateWindow("Sphere");glutDisplayFun (display);init();glutMainLoop();} Christian Nguyen OpenGL (Mesa)

Page 24: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Copie d'é ran

Christian Nguyen OpenGL (Mesa)

Page 25: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Plan1 Sommets et primitives2 Couleurs et a� hage3 Visualisation4 Les listes d'a� hage5 Le réalisme6 Mélange, antialiasing et �ou7 Manipulation d'images8 Le �pipeline graphique� (III)Christian Nguyen OpenGL (Mesa)

Page 26: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Visualisation

Christian Nguyen OpenGL (Mesa)

Page 27: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Visualisation1 positionner, orienter la améra et agen er la s ène : une seuletransformation (glMatrixMode(GL_MODELVIEW) ;),2 hoix de l'obje tif (glMatrixMode(GL_PROJECTION) ;),3 développement, hoix de la taille de l'image papier (viewporttransformation).vertex/normal

coord.

modelview

matrix

projection

matrix

viewport

transformation

window

coord.

coord. dans le

repère de l’oeil

coord.

clippéesNDC

coord. divisées par w(x, y, z, w)

perspective

division

glScale();

glRotate();

glLoadIdentity();

glTranslate();glOrtho();

glFrustum(); glViewport();

Christian Nguyen OpenGL (Mesa)

Page 28: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Fon tions prédé�niesgluLookAt(point, refpoint, upve tor) : positionner intuitivement la améra.Dé�nition du volume perspe tive : glFrustum() ou plus intuitifgluPerspe tive(T, aspe t, near, far) ave T : profondeur de hamp.aspect = w/hT [0, 180]

near

far

w

hLa pyramide de vision perspe tiveChristian Nguyen OpenGL (Mesa)

Page 29: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Dé rire une s ène (2)#in lude <GL/glut.h>#in lude <stdlib.h>void init(void){ glClearColor (0.0, 0.0, 0.0, 0.0);glShadeModel (GL_FLAT);}void display(void){ glClear (GL_COLOR_BUFFER_BIT);glColor3f (1.0, 1.0, 1.0);glLoadIdentity (); /* lear the matrix *//* viewing transformation */gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);glS alef (1.0, 2.0, 1.0); /* modeling transformation */glutWireCube (1.0);glFlush ();}void reshape (int w, int h){ glViewport (0, 0, (GLsizei) w, (GLsizei) h);glMatrixMode (GL_PROJECTION);glLoadIdentity ();glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);glMatrixMode (GL_MODELVIEW);} Christian Nguyen OpenGL (Mesa)

Page 30: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Copie d'é ran (2)

Christian Nguyen OpenGL (Mesa)

Page 31: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Composition de transformationsvoid display(void){ glClear (GL_COLOR_BUFFER_BIT);glColor3f (1.0, 1.0, 1.0);glPushMatrix();glutWireSphere(1.0, 20, 16); /* draw sun */glRotatef ((GLfloat) year, 0.0, 1.0, 0.0);glTranslatef (2.0, 0.0, 0.0);glRotatef ((GLfloat) day, 0.0, 1.0, 0.0);glutWireSphere(0.2, 10, 8); /* draw planet */glPopMatrix();glutSwapBuffers();} Christian Nguyen OpenGL (Mesa)

Page 32: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Les piles de matri esChaque type de matri e possède sa propre pile de matri es(proje tion : 2 ; modelview : 32).Notion pratique pour onstruire des modèles hiérar hiques(transformation relative ; indépendantes : glLoadIdentity). Exemple,une voiture, 4 roues et 5 boulons par roue :1 dessin de la voiture2 mémorisation de son origine3 translation relative appropriée pour pla er la première roue4 mémorisation de la position ourante5 5 translations puis rotations pour les 5 boulons6 suppression de la translation pour revenir à l'origine de la voiture7 translation relative appropriée pour pla er la deuxième roue. . . Christian Nguyen OpenGL (Mesa)

Page 33: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Les piles de matri esLe mé anisme de pile permet la mémorisation de la position ourante (glPushMatrix) et le retour à la position pré édente(glPopMatrix). Exemple :void Roue_Boulons(){ Roue();for (int i = 0 ; i < 5 ; i++) {glPushMatrix();glRotatef(degre*i, 0, 0, 1); // autour de ZglTranslatef(Xb, 0, 0);Boulon(); // ATTENTION : R*T*Boulon()glPopMatrix();}}void Quatre_Roues(){ glPushMatrix();glTranslatef(Xr1, 0, Zr1);Roue_Boulons();glPopMatrix();glPushMatrix();glTranslatef(Xr1, 0, Zr2);Roue_Boulons();glPopMatrix();...} Christian Nguyen OpenGL (Mesa)

Page 34: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Plan1 Sommets et primitives2 Couleurs et a� hage3 Visualisation4 Les listes d'a� hage5 Le réalisme6 Mélange, antialiasing et �ou7 Manipulation d'images8 Le �pipeline graphique� (III)Christian Nguyen OpenGL (Mesa)

Page 35: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Exemple : a� hage d'un er lesolution 1 :glBegin(GL_POLYGON)for (i=0 ; i<100 ; i++) { // COUTEUX !my os = os(i*2*Pi/100); // COUTEUX !mysin = sin(i*2*Pi/100);glVertex2f(my os, mysin);}glEnd();solution 2 : ave un tableauglBegin(GL_POLYGON)for (i=0 ; i<100 ; i++) // COUTEUX !glVertex2fv(& oord[i℄[0℄);glEnd();LA solution : onstruire le er le une fois et mémoriser la onstru tion pour unusage répété. Christian Nguyen OpenGL (Mesa)

Page 36: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Display listsExemple :glNewList(MY_CIRCLE, GL_COMPILE); // ou GL_COMPILE_AND_EXECUTEglBegin(GL_POLYGON)...glEnd();glEndList();...glCallList(MY_CIRCLE);La notion de hiérar hie est également présente :glNewList(...);glCallList(...);glTranslatef(...);glCallList(...);glEndList(); Christian Nguyen OpenGL (Mesa)

Page 37: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Autres possibilitésVe teurs de listes d'a� hage :int glGenLists(range) alloue range identi� ateurs ontigües,glDeleteLists(range) libère un intervale d'indi es,int glIsList(list) vrai si list est déjà utilisé.

Christian Nguyen OpenGL (Mesa)

Page 38: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Autres possibilitésExe ution de plusieurs listes d'a� hage : glCallLists prend omme arguments un tableau d'entiers (o�sets) ; utiliser lorsque lesindi es ont une signi� ation parti ulière :alphabet = glGenLists(128);glNewList(alphabet+'A', GL_COMPILE);drawletter(Adata);glEndList();...glListBase(alphabet);lg = strlen(mot); // mot = "ABC"glCallLists(lg, GL_BYTE, mot);Christian Nguyen OpenGL (Mesa)

Page 39: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Mémorisation d'attributs de segmentsGLuint offset;offset = glGenLists(3);glNewList(offset, GL_COMPILE);glDisable(GL_LINE_STIPPLE);glEndList();glNewList(offset+1, GL_COMPILE);glEnable(GL_LINE_STIPPLE);glLineStipple(1, 0x0F0F);glEndList();glNewList(offset+2, GL_COMPILE);glEnable(GL_LINE_STIPPLE);glLineStipple(1, 0x1111);glEndList();#define drawOneLine(x1, y1, x2, y2) glBegin(GL_LINES); \glVertex2f((x1), (y1)); glVertex2f((x2), (y2)); glEnd();glCallList(offset);drawOneLine(50.0, 125.0, 350.0, 125.0);glCallList(offset+1);drawOneLine(50.0, 100.0, 350.0, 100.0);glCallList(offset+2);drawOneLine(50.0, 75.0, 350.0, 75.0);Christian Nguyen OpenGL (Mesa)

Page 40: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Copie d'é ran

Christian Nguyen OpenGL (Mesa)

Page 41: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Plan1 Sommets et primitives2 Couleurs et a� hage3 Visualisation4 Les listes d'a� hage5 Le réalisme6 Mélange, antialiasing et �ou7 Manipulation d'images8 Le �pipeline graphique� (III)Christian Nguyen OpenGL (Mesa)

Page 42: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Ombre et lumièreShading : glShadeModel(mode) ave mode = (GL_FLAT,GL_SMOOTH).La lumière : odage RVB pour les lumières et la matière :lumière : orrespondent au pour entage d'intensité de haque ouleur,matière : proportion ré�é hie de haque omposante ouleur.Soit (lr , lv , lb) les omposantes de la lumière émise et (mr , mv ,mb) elles de la matière, la lumière parvenant à l'oeil est donnéepar (lr ∗mr , lv ∗mv , lb ∗mb).Christian Nguyen OpenGL (Mesa)

Page 43: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Rendu d'une sphèreNé essite les étapes suivantes :1 dé�nition des ve teurs normaux de haque sommet des objets,2 réation, séle tion et position d'une ou de plusieurs sour eslumineuses,3 réation et séle tion d'un modèle de lumière, qui dé�nit leniveau de la ontribution ambiante et la position e�e tive dupoint de vue (lo al ou à l'in�ni),4 dé�nition des propriétés de la matière pour les objets de las ène. Christian Nguyen OpenGL (Mesa)

Page 44: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Et la lumière futvoid init(void){ GLfloat mat_spe ular[℄ = { 1.0, 1.0, 1.0, 1.0 };GLfloat mat_shininess[℄ = { 50.0 };GLfloat light_position[℄ = { 1.0, 1.0, 1.0, 0.0 };glClearColor (0.0, 0.0, 0.0, 0.0);glShadeModel (GL_SMOOTH);4 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_spe ular);glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);3 glLightfv(GL_LIGHT0, GL_POSITION, light_position);glEnable(GL_LIGHTING);2 glEnable(GL_LIGHT0);glEnable(GL_DEPTH_TEST);}void display(void){ glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);1 glutSolidSphere (1.0, 20, 16);glFlush ();} Christian Nguyen OpenGL (Mesa)

Page 45: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Copie d'é ran

Christian Nguyen OpenGL (Mesa)

Page 46: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Création des sour es lumineusesParamètre Valeur par défautGL_AMBIENT (0.0, 0.0, 0.0, 1.0)GL_DIFFUSE (0.0, 0.0, 0.0, 1.0)GL_SPECULAR (0.0, 0.0, 0.0, 1.0)GL_POSITION (0.0, 0.0, 1.0, 0.0)GL_SPOT_DIRECTION (0.0, 0.0, -1.0)GL_SPOT_EXPONENT 0.0GL_SPOT_CUTOFF 180.0GL_CONSTANT_ATTENUATION 1.0GL_LINEAR_ATTENUATION 0.0GL_QUADRATIC_ATTENUATION 0.0Sour e lumineuse dire tionnelle (+Z) sans attenuation.Christian Nguyen OpenGL (Mesa)

Page 47: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Création des sour es lumineusesA tivation : glEnable(GL_LIGHTi ) ave i = 0..7.Prise en ompte des al uls asso iés aux sour es lumineuses :glEnable(GL_LIGHTING) ;La lumière GL_LIGHT0 est dé�nie pas défaut par les paramètressuivants :GL_AMBIENT(0,0,0,1),GL_DIFFUSE(1,1,1,1),GL_SPECULAR(1,1,1,1),GL_POSITION(0,0,1,0).Christian Nguyen OpenGL (Mesa)

Page 48: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Mouvement d'une lumièrevoid display(GLint angle){ GLfloat light_position[℄ = { 0.0, 0.0, 1.5, 1.0 };glClear(GL_COLOR_BUFFER_BIT) | GL_DEPTH_BUFFER_BIT);glPushMatrix();glTranslatef(0.0, 0.0, -5.0);glPushMatrix();glRotated((GLdouble) angle, 1.0, 0.0, 0.0);glLightfv(GL_LIGHT0, GL_POSITION, light_position);glPopMatrix();auxSolidTorus();glPopMatrix();glFlush();} Christian Nguyen OpenGL (Mesa)

Page 49: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Les sour es lumineuses (suite)Paramètres :de ouleurs : GL_AMBIENT, GL_DIFFUSE,GL_SPECULAR,atténuation (ave position) : 1/(k + kl .d + kq .d2)GL_CONSTANT_ATTENUATION (k ),GL_LINEAR_ATTENUATION (kl),GL_QUADRATIC_ATTENUATION (kq),Christian Nguyen OpenGL (Mesa)

Page 50: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Les spotsGL_SPOT_DIRECTION,GL_SPOT_EXPONENT (fo alisation) : l'intensité lumineusediminue du entre à la périphérie omme le osinus de l'angleentre l'axe et l'objet é lairé à la puissan eGL_SPOT_EXPONENT,GL_SPOT_CUTOFF (angle d'ouverture) : de 0 à 90�, entrel'axe et une génératri e du �ne.Christian Nguyen OpenGL (Mesa)

Page 51: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Modèle d'illuminationContribution ambianteglLightModel*(GL_LIGHT_MODEL_AMBIENT, ...)Lo al ou à l'in�ni (par défaut) :glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,GL_TRUE)Plan de oupe et prise en ompte des fa es arrières :glLightModeli(LIGHT_MODEL_TWO_SIDE, GL_TRUE)Christian Nguyen OpenGL (Mesa)

Page 52: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Propriétés de la matièreglMaterial*(fa e, type, param) :Type Valeur par défautGL_AMBIENT (0.2, 0.2, 0.2, 1.0)GL_DIFFUSE (0.8, 0.8, 0.8, 1.0)GL_AMBIENT_AND_DIFFUSEGL_SPECULAR (0.0, 0.0, 0.0, 1.0)GL_SHININESS 0.0GL_EMISSION (0.0, 0.0, 0.0, 1.0)GL_COLOR_INDEXES (0, 1, 1)GL_COLOR_INDEXES (0, 1, 1)Diminution du oût en prenant en ompte la ouleur ourante (pré édé deglColor*) : glColorMaterial(fa e, mode), rendu a tif parglEnable(GL_COLOR_MATERIAL).Christian Nguyen OpenGL (Mesa)

Page 53: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Plan1 Sommets et primitives2 Couleurs et a� hage3 Visualisation4 Les listes d'a� hage5 Le réalisme6 Mélange, antialiasing et �ou7 Manipulation d'images8 Le �pipeline graphique� (III)Christian Nguyen OpenGL (Mesa)

Page 54: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Mélange (blending)glEnable(GL_BLEND) ; al ul de la ouleur �nale : (Rs .Sr + Rd .Dr , Vs .Sv + Vd .Dv ,Bs .Sb + Bd .Db, As .Sa + Ad .Da),le al ul des fa teurs est dé�ni par la fon tion glBlendFun (Fs ,Fd ), exemple en 2D :// 25% opaque, 75% transparentglBlendFun (GL_ONE, GL_ZERO); // 1xRs, 1xVs, 1xBs, 1xAs// dessin du 1er objet...// 2ieme objet ave alpha = 0,25 : 0,25xRs + 0,75xRd, ...glBlendFun (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);la ouleur résultant dépend de l'ordre dans lequel on a� he lesprimitives graphiques (glDepthMask(GL_FALSE)).Christian Nguyen OpenGL (Mesa)

Page 55: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)AntialiasingMultipli ation de la valeur alpha du fragment par sa ouverture(glEnable(GL_BLEND)) i.e la fra tion en pour entage de lasurfa e du pixel re ouvert par le fragment.Christian Nguyen OpenGL (Mesa)

Page 56: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)AntialiasingDétermination de la qualité du rendu : glHint( ible, hint) ave : ible = GL_POINT_SMOOTH_HINT, GL_LINE_SMOOTH_HINT, GL_POLYGON_SMOOTH_HINT,GL_FOG_HINT (brouillard par pixel ou par sommet),GL_PERSPECTIVE_CORRECTION_HINT (interpolation des ouleurset des textures),hint = (GL_FASTEST option la plus e� a e, GL_NICEST optiongrande qualité de rendu, GL_DONT_CARE au une préféren e).Christian Nguyen OpenGL (Mesa)

Page 57: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Antialiasing des points et des droitesglEnable(GL_POINT_SMOOTH) ou glEnable(GL_LINE_SMOOTH),glEnable(GL_BLEND) etglBlendFun (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)A noter qu'e�e tuant des mélanges, on doit prendre en omptel'ordre du rendu.

Christian Nguyen OpenGL (Mesa)

Page 58: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Antialiasing des polygones1 glEnable(GL_POLYGON_SMOOTH) : les pixels sur les arêtes despolygones ont une valeur α fon tion de leur ouverture,glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST),2 glDisable(GL_DEPTH_TEST) : pour que les fragments soient touspris en ompte,glEnable(GL_BLEND),glBlendFun (GL_SRC_ALPHA_SATURATE, GL_ONE),(GL_SRC_ALPHA_SATURATE = à haque omposant fa teurs (f , f , f , 1)ave f = min(αs , 1− αd ), i.e un pixel ave un α grand serapeu a�e té par les fragments suivants),3 glCullFa e(GL_BACK), glEnable(GL_CULL_FACE),glClearColor(0.0, 0.0, 0.0, 0.0).Christian Nguyen OpenGL (Mesa)

Page 59: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Antialiasing : exemple

Christian Nguyen OpenGL (Mesa)

Page 60: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Antialiasing : exemplevoid display(void){ GLfloat mat_solid[℄ = { 0.75, 0.75, 0.0, 1.0 };GLfloat mat_zero[℄ = { 0.0, 0.0, 0.0, 1.0 };GLfloat mat_transparent[℄ = { 0.0, 0.8, 0.8, 0.6 };GLfloat mat_emission[℄ = { 0.0, 0.3, 0.3, 0.6 };glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glPushMatrix ();glTranslatef (-0.15, -0.15, solidZ);glMaterialfv(GL_FRONT, GL_EMISSION, mat_zero);glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_solid);glCallList (sphereList);glPopMatrix (); Christian Nguyen OpenGL (Mesa)

Page 61: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Antialiasing : exempleglPushMatrix ();glTranslatef (0.15, 0.15, transparentZ);glRotatef (15.0, 1.0, 1.0, 0.0);glRotatef (30.0, 0.0, 1.0, 0.0);glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_transparent);glEnable (GL_BLEND);glDepthMask (GL_FALSE);glBlendFun (GL_SRC_ALPHA, GL_ONE);glCallList ( ubeList);glDepthMask (GL_TRUE);glDisable (GL_BLEND);glPopMatrix ();glutSwapBuffers(); Christian Nguyen OpenGL (Mesa)

Page 62: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Flou de distan e (fog)Fon tion appliquée à haque fragment : mélange de la ouleur ourante et d'une ouleur onstante (de �ou) suivant un fa teur depoids (distan e).1 glEnable(GL_FOG) ;2 glFog*(nom, param) : mélange de la ouleur du brouillard(GL_FOG_COLOR) ave elle du fragment ourant suivant unfa teur f (GL_FOG_MODE) :GL_EXP : f = e−(densite∗z),GL_EXP2 : f = e−(densite∗z)2 ,GL_LINEAR : f = (end − z)/(end − start).Christian Nguyen OpenGL (Mesa)

Page 63: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Flou de distan e (fog)exemple d'initialisation : glFog*(GL_FOG_DENSITY, 0.35),glFog*(GL_FOG_START, 1.0), glFog*(GL_FOG_END, 5.0)Couleur �nale = f .Ci + (1− f ).Cf , ave Ci ouleur du fragment aubout du pipeline et Cf ouleur du brouillard.Christian Nguyen OpenGL (Mesa)

Page 64: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Plan1 Sommets et primitives2 Couleurs et a� hage3 Visualisation4 Les listes d'a� hage5 Le réalisme6 Mélange, antialiasing et �ou7 Manipulation d'images8 Le �pipeline graphique� (III)Christian Nguyen OpenGL (Mesa)

Page 65: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Prin ipesGroupe de valeurs destinées à la mémoire image (frame bu�er).Non a�e tées par les opérations géométriques qui parti ipent aupipeline graphique au ours de la dis rétisation.Position ourante é ran : glRasterPos.glGetFloatv(GL_CURRENT_RASTER_POSITION, . . .) retourne laposition ourante dans l'espa e é ran.Christian Nguyen OpenGL (Mesa)

Page 66: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)BitmapsUtilisation la plus ourante : l'a� hage de ara tères.re tangle de pixel n'ayant que les valeurs 0 et 1.fon tion d'a� hage d'une bitmap :glBitmap(la, ha, x0, y0, xs, ys, bitmap[℄).Remarque : xs, ys s'ajoutent à la �rasterpos� après a� hage de labitmap. Christian Nguyen OpenGL (Mesa)

Page 67: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Pixmapsle ture en mémoire image et sto kage en mémoire onventionnelle :glReadPixels(x, y, la, ha, format, type, pixels[℄)ave format = GL_COLOR_INDEX, GL_RGB, . . .et type =GL_BYTE, GL_UNSIGNED_SHORT,a� hage d'une image ouleur à l'é ran :glDrawPixels(la, ha, format, type, pixels[℄) opie d'une zone re tangulaire de mémoire image à mémoireimage (=glReadPixels() + glDrawPixels()) :glCopyPixels(x, y, la, ha, type)glPixelZoom(Dx, Dy) : normalement haque pixel d'une imageest asso ié à un pixel de l'é ran.Christian Nguyen OpenGL (Mesa)

Page 68: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Sto kage et transformationParamètres permettant le dé odage des valeurs sto kées :format de sto kage, séle tion d'un sous-ensemble de données :glPixelStore(mode, param) ave mode = GL_PACK_ (ou GL_UNPACK_) suivi deSWAP_BYTES, LSB_FIRST, ROW_LENGTH, SKIP_ROWS, SKIP_PIXELS, ALIGNMENT.���������������������������������������������������������������

���������������������������������������������������������������

SKIP_ROWS

SKIP_PIXELS

ROW_LENGTH ontr�le de la onversion qui peut être appliquée aux valeurs obtenues : dilatées,ajustées (glPixelTransfer*()) et tra ées par l'intermédiaire de tables(glPixelMap*()). Christian Nguyen OpenGL (Mesa)

Page 69: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Dé�nition d'une textureEtape 1 : spé i� ation de la texture, haque texel omporte 1, 2, 3ou 4 élément(s) (des quadruplets RVBA) :glTexImage2D(GL_TEXTURE_2D, 0, 3, la, ha, bordure, format, type, *pixels)ave 0 : nombre de résolutions (mimaps), 3 : omposantes R, V, B, la et ha :2m + 2∗bordure, format : GL_RGB (ou index de ouleur, RVBA, . . .), type :GL_UNSIGNED_BYTE (ou INT, SHORT, FLOAT, . . .),fon tion de �ltrage, appliquée lors du pla age sur la primitive :glTexParameter(GL_TEXTURE_2D,GL_TEXTURE_WRAP_[ST℄, GL_[CLAMP, REPEAT℄) ;glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_[MAG,MIN℄_FILTER, GL_[NEAREST, LINEAR℄) ;Christian Nguyen OpenGL (Mesa)

Page 70: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Dé�nition d'une texture (suite)Etape 2 : dé�nition de son in�uen e sur haque pixel : modeDECAL (le texel rempla e le pixel), MODULATE (la ouleur dufragment est transformée) ou BLEND (mélange simple) :glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_[DECAL, MODULATE, BLEND℄),Etape 3 : autoriser le pla age de texture :glEnable(GL_TEXTURE_1D) (2D le plus souvent),Etape 4 : onstruire une s ène, en spé i�ant les oordonnéesgéométriques de texture.Christian Nguyen OpenGL (Mesa)

Page 71: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)ExempleMur de largeur la et de hauteur ha = 2/3la :glBegin(GL_QUADS);glTexCoord2f(0.0, 0.0); glVertex2f();glTexCoord2f(1.0, 0.0); glVertex2f();glTexCoord2f(1.0, 2/3); glVertex2f();glTexCoord2f(0.0, 2/3); glVertex2f();glEnd();������������������������������������������

������������������������������������������

texture "mur"

Christian Nguyen OpenGL (Mesa)

Page 72: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Exemple omplet...#define he kImageWidth 64#define he kImageHeight 64GLubyte he kImage[ he kImageWidth℄[ he kImageHeight℄[3℄;void makeChe kImage(void){ // Create he kerboard texture}void myinit(void){ glClearColor (0.0, 0.0, 0.0, 0.0);glEnable(GL_DEPTH_TEST);glDepthFun (GL_LESS);makeChe kImage();glPixelStorei(GL_UNPACK_ALIGNMENT, 1);glTexImage2D(GL_TEXTURE_2D, 0, 3, he kImageWidth, he kImageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE,& he kImage[0℄[0℄[0℄);glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);glEnable(GL_TEXTURE_2D);glShadeModel(GL_FLAT);} Christian Nguyen OpenGL (Mesa)

Page 73: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Exemple ompletvoid display(void){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glBegin(GL_QUADS);glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0);glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0);glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0);glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0);glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0);glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0);glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421);glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421);glEnd();glutSwapBuffers();} Christian Nguyen OpenGL (Mesa)

Page 74: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Copie d'é ran

Christian Nguyen OpenGL (Mesa)

Page 75: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Plan1 Sommets et primitives2 Couleurs et a� hage3 Visualisation4 Les listes d'a� hage5 Le réalisme6 Mélange, antialiasing et �ou7 Manipulation d'images8 Le �pipeline graphique� (III)Christian Nguyen OpenGL (Mesa)

Page 76: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)EvaluatorsSpé i� ation de fon tions polynomiales à une in onnue ( ourbe deBezier : C (u) = [X (u),Y (u),Z (u)]) ou deux in onnues ( arreau deBezier : S(u) = [X (u, v),Y (u, v),Z (u, v)]).Matri e de polyn�mes onstituée dans la base de Bezier :glMap*( ible, u1, u2, pas, ordre, points[℄)ave ible donnant le type des points de ontr�le, u ∈ [u1, u2], lepas de dis rétisation et l'ordre du polyn�me.Christian Nguyen OpenGL (Mesa)

Page 77: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Utilisation des evaluatorsEn évaluant haque terme de la matri e (glEvalCoord), en lui fournissant un point dudomaine (en lieu et pla e de glVertex).void init(void){ ...glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3,4, & trlpoints[0℄[0℄);glEnable(GL_MAP1_VERTEX_3);}void display(void){ ...glBegin(GL_LINE_STRIP);for (i = 0; i <= 30; i++)glEvalCoord1f((GLfloat) i/30.0);glEnd(); Christian Nguyen OpenGL (Mesa)

Page 78: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Utilisation des evaluatorsEn dé�nissant un sous-espa e du domaine en utilisant la primitiveglEvalMesh(mode, p1, p2) sur la dé�nition du sous-espa e parglMapGrid(pas, u1, u2) ave 0 ≤ p1, p2 ≤ n.C'est tout à fait équivalent à :glBegin(GL_POINTS);for (i = p1 ; i <= p2 ; i++)glEvalCoord1(u1 + i*(u2-u1)/n);glEnd();Christian Nguyen OpenGL (Mesa)

Page 79: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)La mémoire image (frame bu�er)La destination des fragments est la mémoire image, orrespondant àun tableau m× n de pixels asso ié à la fenêtre allouée par OpenGL.Les plans sont regroupés dans di�érents bu�ers logiques ( ouleur,profondeur, �sten il� et a umulation) :bu�er ouleur ( olor bu�er) et bu�er de profondeur (depth bu�er),bu�er �sten il� (sten il bu�er) : valeurs mises à jour lorsqu'un fragment atteint la mémoire image(algorithmes à plusieurs passes, restri tion d'é riture à ertaine zone de l'a� hage, . . .),bu�er d'a umulation (a umulation bu�er) : données RVBA, a umulation d'une série d'imagesen une image �nale omposite (algorithmes multi-passes : anti-aliasing, e�et de profondeur, �oude mouvement).Séle tion d'un bu�er image (double-bu�er, stéréographie) :glDrawBu�er(mode) ave mode = (GL_FRONT, ...).Christian Nguyen OpenGL (Mesa)

Page 80: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Opérations per-fragmentUn fragment est soumis à une série de tests et de modi� ations, avant d'être pla édans le bu�er image, dans et ordre :1 test de dé oupe (s issor test), pro he du test sten il mais portion re tangulaire uniquement,2 test alpha (objets transparents ou textures partiellement transparentes (billboarding)) :1 objets ave α = 1,2 objets ave α 6= 1 et le test de profondeur inhibé.3 test sten il, hoix de la fon tion de omparaison, de la valeur de référen e, de la modi� ationappliquée au fragment,4 test de profondeur (depth test),5 mélange (blending),6 dithering,7 opération logique, uniquement en mode � olor index� (blittering)Christian Nguyen OpenGL (Mesa)

Page 81: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Entrée/sortie utilisateurSéle tion et retour d'information (pour une impression sur untra eur par exemple).Dans es deux modes, les informations d'a� hage sont transmisesà l'appli ation plut�t qu'envoyer à la mémoire image.Conséquen e : l'appli ation est �gée.A la sortie du mode séle tion, OpenGL retourne une liste deprimitives interse tées par le volume de visualisation (sele tion hit).La liste des primitives est retournée omme un tableau d'entiers (de�noms�) et des données asso iées (hit re ords).Une routine permet de déterminer quelle primitive est dessinée prèsdu urseur de séle tion (le pi king est un as parti ulier deséle tion). Christian Nguyen OpenGL (Mesa)

Page 82: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Mé anisme de séle tion hoix du tableau utilisé pour retourner les séle tions : glSele tBu�er(taille,bu�er[℄),mode séle tion pour l'appli ation : glRenderMode(GL_SELECT) (ou GL_RENDERou GL_FEEDBACK),initialisation de la pile des noms par glInitNames() et glPushNames(),dé�nition du volume de visualisation utilisé pour la séle tion (a priori di�érentdu volume de visualisation de rendu : utiliser glPushMatrix() et glPopMatrix()pour sauver le ontexte),alternan e de sto kage des noms et de ommandes de onstru tion d'objets,sortie du mode séle tion et traitement de la séle tion retournée.Christian Nguyen OpenGL (Mesa)

Page 83: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Création de la pile des nomsglInitNames(); // reation de la pile de nomsglPushName(-1); // pour eviter les erreurs de pile vide...glPushMatrix(); // sauve la modelview matrixglLoadName(1); // rempla e le sommet de pileobjet1();glPushName(2);...glPopMatrix(); Christian Nguyen OpenGL (Mesa)

Page 84: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)L'enregistrement des �hits�En mode sele tion, une primitive qui interse te le volume devisualisation génère un �hit�.Chaque enregistrement orrespondant à un hit omprend 4 entrées :le nombre de noms dans la pile des noms,la valeur minimum (et maximum) en Z de l'ensemble dessommets des primitives interse tées par le volume devisualisation,le ontenu de la pile des noms.Christian Nguyen OpenGL (Mesa)

Page 85: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Exemple : sele t.

Christian Nguyen OpenGL (Mesa)

Page 86: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Exemple : sele t. /* pro essHits prints out the ontents of the sele tion array*/void pro essHits (GLint hits, GLuint buffer[℄){ GLint i;GLuint j, names, *ptr;printf ("hits = %d\n", hits);ptr = (GLuint *) buffer;for (i = 0; i < hits; i++) { /* for ea h hit */names = *ptr;printf (" number of names for hit = %d\n", names); ptr++;printf(" z1 is %g;", (float) *ptr/0x7fffffff); ptr++;printf(" z2 is %g\n", (float) *ptr/0x7fffffff); ptr++;printf (" the name is ");for (j = 0; j < names; j++) { /* for ea h name */printf ("%d ", *ptr); ptr++;}printf ("\n");}} Christian Nguyen OpenGL (Mesa)

Page 87: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Exemple : sele t. /* Note that the third and fourth triangles share one name */#define BUFSIZE 512void sele tObje ts(void){ GLuint sele tBuf[BUFSIZE℄;GLint hits;glSele tBuffer (BUFSIZE, sele tBuf);(void) glRenderMode (GL_SELECT);glInitNames();glPushName(0);glPushMatrix ();glMatrixMode (GL_PROJECTION);glLoadIdentity ();glOrtho (0.0, 5.0, 0.0, 5.0, 0.0, 10.0);glMatrixMode (GL_MODELVIEW);glLoadIdentity ();glLoadName(1);drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, -5.0);glLoadName(2);drawTriangle (2.0, 7.0, 3.0, 7.0, 2.5, 8.0, -5.0);glLoadName(3);drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, 0.0);drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, -10.0);Christian Nguyen OpenGL (Mesa)

Page 88: OpenGL (Mesa) - La biblioth que standard 2D/3Dnguyen.univ-tln.fr/share/Infographie3D/trans_ogl.pdf · 2020. 9. 28. · Visualisation Les listes d'a chage Le réalisme Mélange, antialiasing

Sommets et primitivesCouleurs et a� hageVisualisationLes listes d'a� hageLe réalismeMélange, antialiasing et �ouManipulation d'imagesLe �pipeline graphique� (III)Exemple : sele t. glPopMatrix ();glFlush ();hits = glRenderMode (GL_RENDER);pro essHits (hits, sele tBuf);}Résultat :hits = 2number of names for hit = 1z1 is 1; z2 is 1the name is 1number of names for hit = 1z1 is 0; z2 is 0the name is 3 Christian Nguyen OpenGL (Mesa)