Question 1: Mathématiques de
linfographie 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
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
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
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 |