| 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.
 ExamTD120052006Exo1Fichier 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.
 
 ExamTD120052006Exo3Fichier 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.
 ExamTD120052006Exo4Fichier source complet : ExamTD120052006Exo4.cpp
 Modules utilitaires: Modules.zip
 |