Programmation avec OpenGL

 Herve.Frezza-Buet@supelec.fr


Le cours via "glop"

La version moderne (orientée objet) de ce cours se trouve sur la page de glop. Le code y est plus clair que celui présenté ici.


Références


Mode d'emploi

Cette page contient des programmes, qui présentent progressivement l'introduction des concepts OpenGL. Les changements d'un programme à l'autre sont balisés par les commentaires suivants :
 

       /* CHANGEMENT */
      /*    ###     */
      /*    ###     */
      /*  #######   */
      /*   #####    */
      /*    ###     */
      /*     #      */
 

      /*     #      */
      /*    ###     */
      /*   #####    */
      /*  #######   */
      /*    ###     */
      /*    ###     */
      /* CHANGEMENT */

Les liens sur des sources à partir de cette page sont des liens sur des fichiers html, vous pouvez télécharger l'ensemble des fichiers C correspondants.
Pour compiler puis exécuter un fichier toto.c contenant du code OpenGL, il vous suffit sous linux de taper la commande de compilation suivante :

gcc toto.c -lGL -lGLU -lglut
./a.out


Les librairies OpenGL


Les constituants d'un serveur OpenGL

Les buffers

Les piles de matrice

Les textures

Les listes

Les sommets

Les couleurs


Démarrer... avec glut

 BasicGlut.c


Mon premier programme !

 

 Pendule-1.c


Double buffering et z-buffer

 Pendule-1-1.c


Transparence, utilisation du blending (to blend = se fondre)

 Pendule-1-1-1.c


Brouillard...

 Pendule-1-1-2.c


Dessin de contours

 Pendule-1-1-3.c  (notez l'utilisation des listes de commandes...)


Texture

 Pendule-1-1-4.c , la texture utilisée est l'image  tronquée à 128x128.


Texture et transparence

 Pendule-1-1-4-1.c


Définition d'une surface

 Plouf-1.c


Eclairage simple

 Plouf-1-1.c


Plusieurs sources de lumière... que c'est beau !

 Plouf-1-1-1.c


Préparation du travail sur les reflets

  Plouf-2.c


Principe du reflet métallique

Plouf-2-1.c
Plouf-2-2.c
... Pour une surface plane, ce n'est pas terrible !!!!

Reflets dans un "vrai" mirroir

Le programme  Plouf-3.c  est une mise en place du problème, il sert de base aux discussions à venir.

Pour simuler la réflexion dans un mirroir, il faut reconstruire la scène refletée en opérant une simétrie sur la scène réelle.  La scène refletée doit ensuite être débarassée de tout ce qui, après reflet, se trouverait devant la vitre du mirroit.

L'idée alors est de ne retenir de cette scène refletée que ce que l'on voit à travers la vitre du mirroir. Cela revient à ne dessiner la scène refletée que là où elle se reflete : sur la surface de l'écran 2D occupée par la vue en perspective du mirroir. Reste un vrai problème de lumière, celle des reflets n'est pas cohérente avec celle du monde réel. Je paye un café à celle ou celui qui trouve la solution pour y remédier !


Accumulation buffer


GLU

Outils pour définir facilement des surfaces (avec leurs normales) usuelles : tores, cycindres, mais aussi NURBS, etc...