Synthèse d'Image - TD1 : OpenGL: Primitives et fenêtres



Home Research Publications Teaching Personal

Introduction

Ce TD a pour but de vous familiariser avec les primitives d'OpenGL et de comprendre les différentes coordonnées d'une fenêtre OpenGL. Pour ce faire, un squelette de code vous est fourni.

Taches à réaliser

  • Tout d'abord, téléchargez et décompressez le squelette de code, puis compilez avec make dans un terminal. Normalement, une fenêtre noire devrait apparaitre.

  • Afin de comprendre et identifier les fonctions de bases, il vous faudra lire le code. En particulier: la fonction mouse (commandes souris), keyboard (commandes clavier), draw_scene (affichage de la scène), draw_objects (modélisation des objets), window_reshape (remise à l'échelle de la fenêtre). Ces différentes fonctions sont appelés dans le main.

  • Vous allez commencez par affichez les points à la fenêtre. Pour ce faire, chaque nouveau point sera stocké dans le tableau points Remplissez la fonction draw_objects pour un premier affichage. Vérifiez votre programme en insérant quelques points dans le tableau points.

  • Nous cherchons à ce qu'un clique de souris ajoutent un point à afficher à l'endroit exact du pointeur. Remplissez la fonction mouse dans cet optique.

  • Nous allons maintenant comprendre les différentes primitives existantes en OpenGL. Pour ce faire, modifier draw_objects avec les différents types de primitives. Utilisez type et la touche 'c' du clavier!

  • Si vous avez finis les différentes étapes, où bien avez du mal à comprendre les différentes primitives: Affichez les sommets et les arrêtes en même temps que les faces. Pour affichez les arrêtes, utilisez la fonction glPolygonMode.

  • Remarques

  • Les coordonnées (x, y) à l'écran sont comprises entre -1 et 1.
  • Les coordonnées (x, y) de mouse sont les valeurs entières du pixel correspondant dans la fenêtre
  • Voici un exemple de programme pour afficher un point à l'origine:
        glBegin(GL_POINTS);           // Remplacez GL_POINTS par le type de Primitive
          glColor2d (1.0, 1.0, 1.0);   // Couleurs des prochains points (en rgb).
          glVertex2d(0.0, 0.0);         // Place le vertex (point) à la coordonnées 0,0
        glEnd();
  • Pour l'affichage des arrêtes, utilisés glPolygonMode;