Return to M1-MAI Synthèse d’images

Tracé de polygones – Cube

Tracé de polygones – Cube

Le but de ce TP est de se familiariser avec les modes de tracés de polygones. Il met en œuvre des techniques présentées dans le chapitre 2 du Red Book.

Votre compte-rendu sera composé d’une archive contenant un document LibreOffice pour les réponses aux questions, ainsi que votre programme. Utilisez le même programme pour toutes les questions, en ajoutant des fonctions spécifiques à chaque question.

Récupérez, compilez et exécutez le programme cubecouleur

  • Pourquoi un seul côté du carré est-il visible ?
  • Complétez le programme pour afficher un cube de côté 1, dont chaque sommet a pour couleur, la même valeur que ses coordonnées: x->r, y->g, z->b. Combien d’instructions glVertex3f sont-elles nécessaires ? Insérez des captures d’écran dans votre rapport pour montrer toutes les faces du cube.
  • Programmez et utilisez une nouvelle fonction cubeQuadStrip() qui dessine le même cube, mais en utilisant le mode GL_QUAD_STRIP. Combien d’instructions glVertex3f sont-elles nécessaires ?
  • Programmez et utilisez une nouvelle fonction cubeTriangles() qui dessine le même cube, mais en utilisant le mode GL_TRIANGLES. Combien d’instructions glVertex3f sont-elles nécessaires ?
  • Programmez et utilisez une nouvelle fonction cubeTriangleStrip() qui dessine le même cube, mais en utilisant le mode GL_TRIANGLE_STRIP . Faites une figure représentant le cube déplié à plat, pour représenter l’ordre dans lequel les triangles sont tracés.
    Combien d’instructions glVertex3f sont-elles nécessaires ?

Nous nous intéressons maintenant à une méthode différente de tracé, les Vertex Arrays, dans laquelle les attributs sont rangés dans des tableaux, puis les tableaux sont passés à la fonction d’affichage glDrawArrays. Récupérez l’exemple cubecouleurs_arrays qui affiche une face du cube des couleurs.

  • agrandissez les tableaux et remplissez-les pour compléter le cube. Quelle est la taille des tableaux (en nombre de points) ?
  • Créez une variante affichant le cube à l’aide de deux QUAD_STRIP. N’utilisez qu’un seul tableau de coordonnées, chaque bande n’utilisant qu’une partie du tableau (et de même pour les couleurs).

Nous nous intéressons maintenant à une technique évitant la répétition des points, l’indexage. Chaque attribut de point est rangé une et une seule fois dans son tableau, et les points sont représentés par leur numéro dans le tableau. La fonction glDrawElements utilise un tableau d’indices pour représenter les faces.
Récupérez l’exemple cubecouleurs_indexed_arrays qui affiche une bande de deux carrés par indexage.

  • Complétez le programme pour réaliser l’affichage du cube en deux QUAD_STRIP.
  • Pourquoi avoir choisi de représenter les indices par le type GLubyte ? Pourquoi pas GLushort ou GLuint ?
  • Quelle est la taille des tableaux, en nombre de points et nombre d’indices ?
  • Sachant qu’un float est stocké sur 4 octets et un byte sur un octet, quelle est la taille mémoire totale occupée par la géométrie du cube, pour cet affichage indexé ? Comparez à la mémoire utilisée dans le mode non indexé. Conclusion ?