GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points...

74
GRAPHISME PAR ORDINATEUR SIF-1032

Transcript of GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points...

Page 1: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

GRAPHISME PAR ORDINATEUR

SIF-1032

Page 2: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Contenu du cours 2• Introduction à OpenGL• Traçage de points• Traçage de lignes• Traçage de polylignes• Traçage de triangles• Autres outils de dessin

– Fenêtre du monde VS viewport

• Projet de session• LECTURES: Chapitres 2 et 3

Page 3: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL• Le chapitre 1 du livre OpenGL Super Bible donne

une vue d'ensemble des possibilités offertes par OpenGL.

• OpenGL est introduit au chapitre 2 (Super Bible). OpenGL est un ensemble de fonctions codées en langage de programmation C. Ces fonctions constituent un langage de commandes pour une machine virtuelle spécialisée pour la visualisation de scènes contenant des objets (logiciels) à 3 dimensions. Toutes ces fonctions commencent par "gl". En voici quelques unes: glVertex(), glColor(), glPushMatrix(), etc.

Page 4: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL• OpenGL est basé sur un modèle de type "client-serveur":

• Le client est le programme qui utilise les commandes OpenGL. Par exemple, un client peut écrire l’appel de fonction "glVertex3f(1.0,2.0,3.0);" dans un programme . Ce qui signifie qu'on veut passer au serveur l'information qu'un sommet est situé dans l’espace au point (1.0,2.0,3.0). Cette information est stockée dans une représentation interne au niveau du serveur. Cette représentation interne est utilisée par le code du serveur qui est responsable d'afficher les objets à l'écran.

Page 5: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL

• Nous avons déjà mentionné qu'OpenGL avait comme origine la programmation de la machine graphique Iris (de SGI). Les commandes sont en fait destinées à programmer une machine de type Iris qui est simulée sur un PC.

• Comme le graphisme par ordinateur est très complexe, il n'est pas étonnant qu'il y ait des centaines de commandes et d'options, et plusieurs façons de réaliser le même travail. Le code de la machine OpenGL est contenu dans les fichiers Opengl32.dll, glu32.dll et glut32.dll.

• En plus des instructions (commandes), la machine virtuelle a aussi des registres qui maintiennent l'état actuel de la machine. Leur nombre est aussi élevé.

Page 6: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL

• Les cartes graphiques existent en plusieurs modèles. Les modèles récents contiennent un processeur graphique qui permet d'accélérer les opérations d'affichage. Ainsi, le serveur OpenGL communique au pilote de la carte graphique les opérations qu’il doit exécuter.

• OpenGL est une API (Application Programming Interface). • La programmation OpenGL est complexe à cause du fait

qu'on utilise le langage C (avec une approche de bas niveau). Ainsi, il faut en général toute une série de commandes pour une opération logique souvent simple.

Page 7: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL

• Les types d'OpenGL– À la page 41 de la Super Bible, on retrouve un tableau qui montre tous les types

supportés par OpenGL. Par exemple, GLfloat est un float en C.

– Le type "double" n’est pas supporté parce que les opérations avec des floats sont plus rapides.

– Nous rappelons que pour la fonction "glVertex3f(1.0,2.0,3.0)". Le 3 signifie que le point est spécifié avec 3 coordonnées (3D) et le "f" signifie que les points sont des "floats".

• La librairie GLUT– La librairie GLUT est utilisée dans beaucoup d'exemples dans les livres de

références. Elle offre un interface avec le système de fenêtres de l'ordinateur qui est indépendante du système d'exploitation.

– Cette interface est très élémentaire et n'est jamais utilisée dans les applications professionnelles. C'est pour cette raison qu‘il est préférable d'utiliser l'interface des classes MFC

Page 8: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL

• Retour sur le projet GLRect (Super Bible: page 51)

Page 9: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL

• Retour sur le projet GLRect (Super Bible: page 51)

Page 10: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL

• Retour sur le projet GLRect (Super Bible: page 51)

Page 11: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL

• Retour sur le projet GLRect (Super Bible: page 51)

Fenêtres redimensionnées

Page 12: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL• Voici quelques remarques sur le programme:

– Il s'agit d'une application Win32 de type console. La fonction "main" démarre le programme. Elle initialise le mode d'affichage à un espace mémoire aussi appelé "buffer" (GLUT_SINGLE). Ensuite, on désigne la fonction "RenderScene()" pour répondre au message WM_PAINT de Windows qui est appelée lorsque le système doit redessiner. On désigne aussi la fonction "ChangeSize()" qui est appelée lorsqu'on change la taille de la fenêtre. La fonction "SetupRC()" sert à définir les propriétés de rendu (rendering context).

– La fonction SetupRC() définit la couleur de fond à bleu. Les couleurs sont toujours données avec RGB (rouge, vert, bleu). Parfois, on utilise une 4 ième composante appelée "alpha" (opacité) et qui est 1 en général. On l'utilise parfois pour mélanger une couleur avec la couleur de fond. "0.5f" signifie que le nombre est un float.

– La fonction "RenderScene()" trace un rectangle rouge. La fonction glRectf() place le rectangle avec z=0. On donne les coins opposés du rectangle. Notez que la fonction

glRect(x1, y1, x2, y2) est équivalente à :

Page 13: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL• Voici quelques remarques sur le programme:

– La fonction glOrtho() définit un volume de visualisation en 3D (viewing volume ou frustum) qui représente l'espace des éléments visuels retenus pour l'affichage (les éléments en dehors de cette zone ne sont pas affichés).

– Les objets sur la frontière du volume de visualisation sont découpés (Clipping)

Page 14: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL• Les commandes envoyées au serveur OpenGL sont accumulées. La commande

glFlush() sert à actualiser toutes les commandes accumulées.

• Dans la fonction ChangeSize(), la fonction glViewport() informe OpenGL de la taille de la fenêtre d’affichage. Ensuite, on définit le type de projection "Orthogonale".

• Il faut savoir qu'une projection en perspective fait se rapprocher des lignes parallèles qui s'éloignent en z. Cette projection donne l’effet de profondeur.

• Dans une projection orthogonale, les points sont projetés en selon l’axe z (x,y,0). La fonction glOrtho() fixe le rapport entre les unités de l'utilisateur et celle de la

fenêtre:

Page 15: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL• Librairies *.lib, DLLs et fichiers *.h

– La librairie GLUT n'est pas supportée par Microsoft. Aussi, vous la trouverez sur le disque du livre ou sur le site FTP du cours:

Page 16: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL• Pour utiliser les exemples de programmes il faut au

préalable organiser l’environnement de travail Microsoft Visual C++ .NET: – Inclure le fichier header glut.h comme suit:

Page 17: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL• Inclure le fichier librairie glut32.lib comme suit:

Page 18: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL• Inclure le fichier DLL glut32.dll dans le répertoire

c:/WINNT/System comme suit:

Page 19: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL• Une autre façon consiste à indiquer à VS où sont ces

éléments avec le menu Tools/Options:

Page 20: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL• Voici les fichiers *.h et *.lib que vous allez utiliser:

Page 21: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Introduction à OpenGL• Si vous avez des erreurs de liens aux librairies (Link Error),

c'est que le compilateur ne trouve pas une des librairies *.lib. On peut aussi ajouter ces librairies dans les propriétés du projet:

Page 22: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de points

• Une séquence de points est représentée par une liste ordonnée de points p0=(x0,y0), p1=(x1,y1) ,…., pn=(xn,yn).

• Avec OpenGL chaque point individuel est dessiné en spécifiant ses coordonnées (x,y,z).

• Le système d'axes (coordonnées) normal: X vers la droite, Y vers le haut, et Z augmentant en se rapprochant de l'oeil ou observateur. On suit aussi toujours la règle de la main droite: un angle positif est anti-horaire.

• Code de la fonction main():

Page 23: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de points• Le programme de la page 85 du livre [1] (répertoire Points chap. 4) montre comment tracer

des points sous la forme d'un ressort. Voici le code de l'affichage:

Page 24: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de points

• La fonction glRotate() permet de spécifier un angle en degrés, puis l'axe de rotation. On a donc demander d'abord une rotation autour de l'axe X, et une rotation autour de l'axe Y. Ces rotations permettent de déplacer les points du ressort donc de modifier l’orientation de la visualisation

• Ensuite, on demande de tracer des points avec la grandeur par défaut (1 pixel) avec la fonction glBegin(GL_POINTS). On dessine environ 90 points et la coordonnée z commence à -50, augmente de 0.5 à chaque itération, donc la valeur finale de z est à peu près 45. Donc le ressort est à peu près centré en z.

Page 25: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de points

• Ensuite, on a défini une fonction pour recevoir les caractères du clavier glutSpecialFunc(SpecialKeys); dans la fonction main().

key ??, xRot

Page 26: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de points

• On remarque que la flèche vers le haut diminue l'angle xRot de -5 degrés et la flèche droite augmente l'angle yRot de 5 degrés.

• Nous pourrions ramener les angles de rotation xRot et yRot à zéro avec la touche "END ou Fin". On peut examiner le contenu du fichier glut.h pour trouver les noms des touches du clavier:

Page 27: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de points

• Exemples d’exécution:

Page 28: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de lignes

• Le programme (page 91 Super Bible) montre que la fonction glBegin(GL_LINES) permet de tracer des lignes. Il suffit de fournir les extrémités des lignes par paires.

• On peut aussi spécifier la taille des lignes avec la fonction glLineWidth()

Page 29: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de lignes

• Les fonctions glEnable(GL_LINE_STRIPPLE) et glLineStripple(factor, pattern) permettent de tracer des lignes pointillées quelconque. "factor" est le grossissement et pattern est le jeu de bits (voir les pages 96-97). Notez qu'on doit activer ce mode avec la fonction glEnable(GL_LINE_STRIPPLE). On désactive un mode avec la fonction inverse glDisable(GL_LINE_STRIPPLE). Ceci s'applique à toutes les options d'affichage.

Page 30: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes• Une polyligne est une séquence de droites jointes

bout à bout

• Une séquence de droites dont le point terminal de la dernière droite rejoint le point de départ de la première ligne est appelé un polygone

• Une polyligne est représentée par une liste ordonnée de points p0=(x0,y0), p1=(x1,y1) ,…., pn=(xn,yn)

• Avec OpenGL une polyligne est dessinée en spécifiant les sommets

Page 31: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes• Exemples de traçage de polylignes (répertoire

polyligne)– Traçage de 3 lignes vertes contiguës d ’une épaisseur de

5 pixels• glBegin(GL_LINE_STRIP);… glEnd();

– Indique le traçage de lignes contiguës

• glLineWidth(5.0); // largeur des lignes

Page 32: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes

• Exemples de traçage de polylignes (répertoire polyligne)

Page 33: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes

• Exemples de traçage de polylignes (répertoire polyligne)

Page 34: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes (forme ouvertes)

Page 35: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes (formes fermées)

Page 36: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes (formes fermées)

Page 37: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes

• Exemples de traçage de courbe avec des polylignes (répertoire polylignecourbe)– Traçage de lignes vertes contiguës d ’une épaisseur de 1

pixel permettant d ’approximer une courbe• glVertex3f(x,y,z) // points dans l ’espace

• Procédure SpecialKeys(key,x,y); – Permet de faire bouger l ’objet dessiné dans l ’espace

• glRotatef(xrot,1.0f,0.0f,0.0f);– Permet de faire une rotation autour de l ’axe x d ’un angle xrot

• glRotatef(yrot,0.0f,1.0f,0.0f);– Permet de faire une rotation autour de l ’axe y d ’un angle yrot

Page 38: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes

• Exemples de traçage de courbe avec des polylignes (répertoire polylignecourbe)

Page 39: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes

• Exemples de traçage de courbe avec des polylignes (répertoire polylignecourbe)

Page 40: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes

• Exemples de traçage de courbe avec des polylignes (répertoire polylignecourbe)

Page 41: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes

• Exemples de traçage de courbe avec des polylignes (répertoire polylignecourbe)

Page 42: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes

• Il est aussi possible de tracer une polyligne à partir d ’un fichier avec un format donné

• Exemple de fichier21 nombre de polylignes totales

4 nombre de points de la première polyligne

169 118

174 120

179 124

178 126

5

etc.

Page 43: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes

• Il est aussi possible de tracer une polyligne à l ’aide de la souris (répertoire polymouse)– myMouse() est une procédure qui trace une

polyligne au fur et à mesure que les points sont introduits à l ’aide de la souris

– GLUT_LEFT_BUTTON et GLUT_BUTTON_RIGHT correspondent aux boutons gauche et droit de la souris

– GLUT_DOWN indique qu ’une touche est enfoncée

Page 44: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes

• Il est aussi possible de tracer une polyligne à l ’aide de la souris (répertoire polymouse)

Page 45: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes

• Il est aussi possible de tracer une polyligne à l ’aide de la souris (répertoire polymouse)

Page 46: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de polylignes

• Exemple de traçage une polyligne à l ’aide de la souris (répertoire polymouse)

Page 47: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de triangles• Les objets 3D sont représentés dans l’ordinateur en décrivant leur

surface. Cette surface est décomposée en sections planaires qu'on appelle "polygones". Comme les surfaces doivent être planaires, on doit s'assurer que tous les points d'un polygone appartiennent à la même surface planaire.

• Une méthode fréquemment utilisée consiste à décomposer la surface à l'aide de triangles (triangularisation ou tessalation). La fonction glBegin(GL_TRIANGLES)¸permet de définir des triangles par groupe de 3 sommets. La fonction glBegin(GL_TRIANGLE_STRIP) permet de spécifier des triangles rattachés. Après les 3 premiers sommets, chaque sommet subséquent définit un nouveau triangle en ré-utilisant l'arête précédente (edge).

• La fonction glBegin(GL_TRIANGLE_FAN) permet de définir des surfaces en arcs de cercle.

• La fonction glBegin(GL_QUADS) permet de spécifier des structures à 4 sommets. glBegin(GL_QUAD_STRIP) permet de spécifier une séquence de polygones à 4 sommets.

Page 48: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de triangles

• GL_TRIANGLE_STRIP/GL_TRIANGLE_FAN

Page 49: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de triangles

• GL_QUAD_STRIP/GL_QUAD

Page 50: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de triangles• Les fonctions précédentes réduisent le nombre de sommets

à spécifier. De plus, elles permettent de définir des structures non-convexes, ce qui n'est pas le cas de glBegin(GL_POLYGON). Finalement, OpenGL n'est pas consistent: les quads sont CW (clockwise), les triangle strips sont CCW (counter clock wise), les triangle fans sont CW.

• Pour tester ces concepts, vous devez analyser très attentivement le programme "Triangle" du chapitre 4 du livre OpenGL Super Bible (page 102).

• Notez toutes les fonctions qui y sont définies: glPolygonMode(), glFrontFace(), glCullFace(), glEdgeFlag(), etc. Notez aussi toutes les anomalies de ce programme par rapport à la réalité. On appelle le graphisme 3D "réalité virtuelle" parce qu'on peut afficher des images qui n'ont pas d'équivalent dans la réalité de tous les jours.

Page 51: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de triangles• Les fonctions précédentes réduisent le nombre de sommets

à spécifier. De plus, elles permettent de définir des structures non-convexes, ce qui n'est pas le cas de glBegin(GL_POLYGON). Finalement, OpenGL n'est pas consistent: les quads sont CW (clockwise), les triangle strips sont CCW (counter clock wise), les triangle fans sont CW.

• Pour tester ces concepts, vous devez analyser très attentivement le programme Triangle du chapitre 4 du livre OpenGL Super Bible (page 102).

• Notez toutes les fonctions qui y sont définies: glPolygonMode(), glFrontFace(), glCullFace(), glEdgeFlag(), etc. Notez aussi toutes les anomalies de ce programme par rapport à la réalité. On appelle le graphisme 3D "réalité virtuelle" parce qu'on peut afficher des images qui n'ont pas d'équivalent dans la réalité de tous les jours.

Page 52: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de triangles• Dans l'exemple Triangle, on présente aussi le concept de

Culling. Cette opération est utilisée pour cacher les facettes dont l'extérieur n'est pas dirigée vers l'observateur.

• Ce projet permet aussi d’introduire le Depth test. En effet, comme il y a une composante en z pour chaque sommet des objets, certains objets peuvent alors en cacher d'autres. OpenGL résout ce problème en utilisant un depth buffer (appelé aussi z-buffer) qui est une mémoire supplémentaire dans laquelle il place la coordonnée de distance à l'observateur, de chaque point affiché (dans le buffer de l'image). Si par la suite, OpenGL rencontre un point qui est plus près de l'observateur, alors il modifie le point de l'image et la profondeur (plus petite) dans le z-buffer.

Page 53: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de triangles (Projet Triangle)

Page 54: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de triangles (Projet Triangle)

Page 55: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de triangles (Projet Triangle)

Page 56: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de triangles (Projet Triangle)

Page 57: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de triangles (Projet Triangle)

Page 58: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de triangles (Projet Triangle)

Page 59: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de triangles (Projet Triangle: exécution)

Page 60: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de triangles (Projet Triangle: exécution sans surfaces cachées)

Page 61: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de triangles (Projet Triangle: exécution avec culling)

Page 62: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Traçage de triangles (Projet Triangle: exécution avec l’arrière plan en fil de fer)

Page 63: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Gestion des touches du clavier• Voir les leçons 4 et 7 dans NeHe

– Ouverture d’une fenêtre Windows avec le WINAPI

– Gestion des messages provenant de la fenêtre par une fonction LRESULT CALLBACK WndProc()

– Gestion des touches du clavier dans la fonction principale int WINAPI WinMain()

Page 64: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Autres outils de dessins• Fenêtre du monde VS viewport

– Une surface dans le système de coordonnées du monde sélectionnée pour l’affichage est appelée une fenêtre du monde. Une surface sur un écran sur laquelle est proje-tée la fenêtre est un port de visualisation (viewport)

– La visualisation d ’une scène correspond alors à la transposition des objets observés dans une fenêtre du monde vers un viewport dans l’écran

Page 65: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Autres outils de dessins

• Fenêtre du monde VS viewport

Page 66: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Autres outils de dessins

• Fenêtre du monde VS viewport

• WC -> VC– Pour maintenir les mêmes positions relatives dans les

deux représentations nous devons savoir

minmax

min

minmax

min

minmax

min

minmax

min

ywyw

ywyw

yvyv

yvyv

xwxw

xwxw

xvxv

xvxv

v: viewportw: window

Page 67: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Autres outils de dessins

• Fenêtre du monde VS viewport

• WC -> VC– Maintien des positions relatives

Page 68: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Autres outils de dessins

• Fenêtre du monde VS viewport

• WC -> VC– Nous pouvons alors déduire (xv,yv) par

minmax

minmax

minmax

minmax

minmin

minmin

)(

)(

ywyw

yvyvsy

xwxw

xvxvsx

syywywyvyv

sxxwxwxvxv

Page 69: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Autres outils de dessins

• Fenêtre du monde VS viewport– Exemple de traçage d ’une fonction sinc

• glOrtho2D(-5.0,5.0,-0.3,1.0) // permet de définir les bornes de la fenêtre du monde

• glOrtho2D(left, right, buttom, up);

• glViewport(0.0,0.0,640.0,480.0); //permet de définir la dimension du viewport

• glViewport(xcorner,ycorner,width,height);

Page 70: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Autres outils de dessins

• Fenêtre du monde VS viewport– Exemple de traçage d ’une fonction sinc

Page 71: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Autres outils de dessins

• Fenêtre du monde VS viewport– Exemple de traçage d ’une fonction sinc

Page 72: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Autres outils de dessins

• Fenêtre du monde VS viewport– Exemple de traçage d ’une fonction sinc

Page 73: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Autres outils de dessins

• Fenêtre du monde VS viewport– Exemple de traçage d ’une fonction sinc

Page 74: GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 2 Introduction à OpenGL Traçage de points Traçage de lignes Traçage de polylignes Traçage de triangles.

Projet de session • Constitution des équipes

• Choix du projet (animation, image de synthèse, objets impliqués)

• Choix du modèle de représentation des objets

• Répartition initiale des tâches (important)

• Premier échéancier (12 mars 2012)– objets modélisés– visualisation des objets– animation simple dans l’espace