Synthèse d'images, ESSI3
Examen, 15 février 2004

Objectifs et moyens

L'objectif de ce travail sera de représenter des molécules sous la forme symbolique de leur formule chimique. Vous devrez définir les structures de données définissant les molécules et composer un graphe de scène pour les représenter. Des illustration du résultat attendu sont données ci-après.

Avant de commencer le travail de programmation, lisez le sujet dans son entier et réfléchissez à la structure de votre programme.

Vous disposez d'installations linux sur CD avec Java3D, sa documentation et les tutoriaux. Vous êtes connectés sous l'identité 'knoppix'. Votre répertoire utilisateur de travail (/home/knoppix) est un disque virtuel en mémoire. Vous disposez d'une disquette pour la sauvegarde et le rendu de votre travail. S'il est plus confortable de compiler et d'exécuter le code depuis le répertoire de travail, cet espace mémoire ne survit pas à un éventuel plantage machine. Il est donc indispensable de copier régulièrement votre travail sur la disquette. Pour cela, réalisez les commandes:

Java (JDK 1.5.0) et java3D (1.3.1) sont installés sur votre système. Vous devez configurer les variables d'environnement PATH et le CLASSPATH de votre système pour compiler et exécuter le code:
export PATH=/usr/java/jdk1.5.0/bin:${PATH}
export CLASSPATH=::/usr/java/jdk1.5.0/jre/lib/ext/j3dcore.jar:\
/usr/java/jdk1.5.0/jre/lib/ext/j3daudio.jar:\
/usr/java/jdk1.5.0/jre/lib/ext/j3dutils.jar:\
/usr/java/jdk1.5.0/jre/lib/ext/vecmath.jar

Ensuite, vous pouvez compiler en invoquant simplement la commande javac et exécuter en invoquant java. La documentation de java, java3D et les tutoriaux sont installés localement sur votre système. Vous êtes cependant isolés du réseau.

L'utilitaire emacs est installé sur vos machines. Vous pouvez réaliser la compilation directement depuis emacs en utilisant le menu 'Tools' -> 'Compilation'. Entrez la ligne de compilation (javac *.java) lors de la première compilation. Vous pouvez forcer la colorisation du code lors du premier chargement de chaque fichier source avec la commande: 'Alt-x font-lock-mode'.

Un squelette de programme est disponible sur votre disquette dans le fichier Example.java. Il ouvre un canvas 3D et affiche un cube. Vous le modifierez et vous ajouterez les classes nécessaires. Vous n'avez pas besoin d'étudier le détail du code fournit. Il devrait vous suffire d'écrire vos classe et d'insérer les appels à votre code dans le constructeur de la classe Example.

Les 3 boutons apparaissant sous la fenêtre principale ont pour but de vous faciliter la tâche si vous éprouvez le besoin d'utiliser des commandes pour faciliter l'utilisation de votre programme. Afin de ne pas perdre de temps en développement d'interface graphique, vous pouvez simplement:

  1. Implémenter l'interface ButtonListener dans la classe qui doit recevoir les événements.
  2. Transmettre l'objet de réception des évènements au constructeur de Frame3D.
  3. Gérer les actions à associer à chaque bouton dans les méthodes onButton1/2/3 de cette classe.
L'utilisation de ces boutons n'est en rien indispensable.

A la fin de la séance, vos fichiers seront récupérés depuis votre disquette. Vous devrez y laisser:

N'oubliez pas de copier tous les fichier du disque virtuel vers la disquette avant de rendre votre travail!

Sujet

Vous représenterez des molécules chimiques simples constituées d'atomes d'hydrogène, de carbone et d'oxygène. Chaque atome est représenté par une sphère comme dans l'exemple suivant:

  1. Définissez une structure de données pour représenter les atomes. Chaque atome est décrit par un lettre, sa taille, sa couleur, et sa valence en respectant les données suivantes:
    Atome Lettre Taille relative Couleur Valence
    Hydrogène H 1 vert 1
    Carbone C 2 gris 4
    Oxygène O 2.5 bleu 2
    On rappelle que la valence d'un atome est le nombre (fixe pour un type d'atome particulier) de liaison que celui ci peut établir avec d'autres atomes. Des ensembles d'atomes liés entre eux forment ainsi des molécules. La valence est le nombre d'électron que des atomes liés partagent. Dans les exemples que vous manipulerez, chaque liaison peut être simple (partage d'un seul électron) ou double (partage de deux électrons).
  2. Donnez des représentations graphiques aux atomes sous forme de sphère de couleur. Affichez les trois types d'atome dans la fenêtre java3D.
  3. Donnez du recul à la caméra pour lui permettre de visualiser correctement la scène et ajoutez les lumières nécessaires.
  4. Ajoutez à l'affichage des sphères la lettre descriptive de chaque atome comme dans l'exemple ci-dessus. Avant de passer à la suite qui va nécessiter des modifications conséquentes, vous pouvez sauvegarder à part ce premier programme sous le nom 'Etape1.java'.
  5. Définissez une structure de données pour représenter une molécule. Les 6 molécules que vous allez représenter sont le dioxygène (O2), l'eau (H20), le méthane (CH4), le méthanol (CH3OH), l'éthylène (C2H4) et le propène (CH3CHCH2) qui sont représentées ci-après:
    Par soucis de simplification, chacune de ces structures est décrite dans un plan et la distance entre 2 atomes liés est toujours la même. On peut donc représenter la position relative d'un atome et de son voisin par un simple angle (on prendra comme origine des angles l'axe X comme dans l'exemple suivant:
    Mettez en oeuvre une structure aussi simple que possible pour la représentation des molécules. On pourra en particulier s'appuyer sur la structure arborescente des molécules. En tête de votre classe, insérez un commentaire expliquant la structure de donnée choisie.
  6. Faîtes afficher les molécules comme des ensembles d'atomes répartis dans l'espace.
  7. Ajoutez les liaisons atomique à vos molécules, qui sont représentées comme des cylindres blanc joignant les atomes 2 à 2.
  8. Proposez un moyen pour différentier les liaisons doubles des liaisons simples. Trois liaisons doubles apparaissent dans les 6 molécules proposées: entre les deux atomes d'oxygène de l'O2, entre les deux atomes de carbone de l'éthylène, et entre deux des atomes de carbone du propène (les liaisons doubles peuvent facilement être devinées par la valence des molécules).
  9. Disposez les 6 molécules sur un cercle autour de la caméra et faites tourner celui-ci de manière à ce qu'elles défilent tour à tour devant la caméra:
  10. Ajoutez une image de texture de fond à votre scène virtuelle (une image est disponible sur votre disquette):
  11. Déjà fini? Proposez une représentation compact des molécules (sans liaison, avec les atomes qui entrent en contact). Pouvez vous passer de manière progressive de la représentation compacte à la représentation liée et réciproquement?
  12. N'oubliez pas de copier tous les fichier du disque virtuel vers la disquette avant de rendre votre travail!