Correction examen
de TD n°1 2005-2006

RETOUR

Mercredi 9 novembre 2005 - 1h25

Question 1: Mathématiques de l’infographie

L'implantation choisie consiste à placer les deux méthodes de composition transformation-vecteur et transformation-transformation dans la classe Transformation.
La méthode de composition transformation-vecteur prend un vecteur comme paramètre, le compose et quitte avec le vecteur en paramètre modifié.
La méthode de composition transformation-transformation prend une transformation comme paramètre, la compose et quitte avec la transformation this modifiée.
Garde est prise aux éventuels effets de bord pouvant intervenir au cours des produits matriciels.

ExamTD120052006Exo1
Fichier source complet : ExamTD120052006Exo1.cpp

ExamTD120052006Exo1-01.gif (19721 octets)

Question 2: Réutilisation des objets en VRML

On utilise le noeud WWWInline pour le téléchargement inline d'un fichier VRML au sein d'un autre fichier VRML. La bounding box est ajustée à la taille et au centre de l'objet du fichier Aiguille.wrl.
On utilise aussi le DEF et le USE pour éviter d'implanter deux WWWInline strictement identiques (économie en terme de place occupée dans le fichier et possibilité d'optimisation du téléchargement offerte au viewer).
Un noeud Scale est utilisé pour ajuster la taille de la "petite" aiguille (aiguille des heures). Les rotations de chaque aiguille sont programmées en sens rétrograde (angle de valeur négative).

ExamTD120052006Exo2-02.gif (9834 octets)

ExamTD120052006Exo2

Question 3: Caméras en OpenGL

La fonction reshape programmée est "classique".
Elle comporte un appel à glViewport configuré pour l'utilisation de l'intégralité de la fenêtre d'affichage.
La caméra de visualisation en perspective est configurée via un appel à gluPerspective avec comme paramètres:
- 23°: ouverture verticale de la caméra =
arctangente(taille de la scène / distance entre la scène et la caméra) =
atan (400 de diamètre / environ 1000 de distance entre la caméra de position (-300.0, 200.0, -100.0) et la scène de position (300.0, -400.0, 400.0) =
atan(0.4) qui est voisin de 0.4 radian = 23° (24° dans la solution proposée),
- (float) tx/ty: Conservation du ratio d'ouverture de la caméra égal au ratio de la fenêtre,
- 750.0: visualisation à partir d'une distance de 750.0 (un peu moins que la distance minimale entre la caméra et la scène
- 1250.0: visualisation jusqu'à une distance de 1250.0 ( un peu plus que la distance maximale entre la caméra et la scène.
Le placement et l'orientation de la caméra sont réalisés via un seul appel à la fonction gluLookAt avec comme paramètres la position de la caméra, la position du point visé (le centre de la scène) et la direction de la verticale (l'axe z (0.0, 0.0, 1.0)).
Cet appel est placé en dernière position dans la fonction reshape pour être réalisé en mode MODELVIEW et intervenir entre le gluPerspective et le dessin de la scène.

ExamTD120052006Exo3-01.gif (16417 octets)

ExamTD120052006Exo3
Fichier source complet : ExamTD120052006Exo3.cpp
Modules utilitaires: Modules.zip

Question 4: Animation en OpenGL

Une seule variable globale de type float est utilisée. Elle caractérise l'angle de rotation du spot pour l'image en cours. Elle est initialisée à 0.0F.
La fonction idle incrémente la variable globale angle de 2.0F° et poste un événement redisplay via un appel à la fonction glutPostRedisplay().
La fonction display est construite classiquement avec un appel à glClear pour effacer les buffer écrans nécessaires (couleur et profondeur). Puis, au sein d'un couple glPushMatrix()-glPopMatrix(), la lumière est définie du point de vue de sa position et de son orientation et la scène est dessinée. Enfin, un appel à glFlush() signifie la fin du dessin d'une image puis un éventuel glutPostRedisplay() provoque le swap des tampons couleur écrans si le double-buffering est utilisé.
L'animation du spot est réalisée via un appel à glRotatef(...) avant la définition de sa direction d'éclairage au moyen d'un appel à glLightfv(...). La rotation ne devant porter que sur la direction, on encadre le couple d'instructions précédent dans un couple glPushMatrix()-glPopMatrix(). Le glLightfv(...) de définition de la position du spot peut être réalisé indifféremment avant ou après. Mais les deux glLightfv(...) doivent être placés avant la modélisation de la scène de manière que la scène soit correctement éclairée.

ExamTD120052006Exo4
Fichier source complet : ExamTD120052006Exo4.cpp
Modules utilitaires: Modules.zip

Quelques indications sur l'évaluation

Tous les exercices sont affectés des coefficients 0.63, 0.53, 0.75 et 0.75.
L'examen est trop long pour être réalisé en une durée de 1h25. Il est demandé aux étudiants de réaliser correctement trois exercices sur quatre pour obtenir la note maximale.

Pages trouvées

Remarques, erreurs
nicolas.janey@univ-fcomte.fr