Projet OpenGL - Impression 3D
Objectifs
Conception et implantation d'un prototype de logiciel de stéréolithographie.
L'application doit permettre l'affichage d'un modèle d'impression 3D (fichier STL : STereo-Lithography) et la mise en évidence de minimums locaux.
L'utilisateur doit avoir la possibilité de se déplacer autour du modèle (rotation, translation et zoom), ceci de façon interactive par l'intermédiaire de la souris ou de touches du clavier.
Choix et affichage du modèle
Une interface minimaliste, utilisant par exemple le module tkinter (non imposé), doit permettre le choix d'un fichier d'extension .stl et l'affichage 3D du modèle (avec OpenGL).
Le fichier suivant doit servir de fichier de test.
Quelques informations utiles doivent apparaître : le nom des solides définis, le nombre de sommets de chaque solide, les dimensions des solides en longueur, hauteur et profondeur ainsi que la position de leur barycentre.
Interaction
La caméra doit être placée de façon à avoir une vision globale de la scène.
Tant qu'aucune translation n'a été effectuée, les rotations doivent se faire autour du barycentre de la scène.
Un bouton ou une touche doit être réservé à la réinitialisation de la vue.
Recherche de minimums locaux
Afin d'optimiser cette recherche, une première étape de subdivision de l'espace de modélisation est nécessaire.
Elle pourra s'appuyer sur une structure simple de type octree, ou une structure plus efficace de type k-d-tree. Il faudra trouver un équilibre entre profondeur de l'arbre et taille des feuilles afin d'obtenir le meilleur gain en temps (voir ci-dessous).
Cette subdivision va permettre de faire une recherche efficace des voisins de chaque sommet du modèle. Par voisins, on entend sommets liés au sommet considéré par une arête (donc appartenant au même triangle).
Une fois la liste des voisins de chaque sommet établie (un affichage du temps total doit se faire), on mettra en évidence les minimums locaux sur la base du constat qu'un sommet est d'ordonnée minimale par rapport à tous ses voisins. Sur le plan visuel, tout triangle comportant un sommet bas sera affiché en rouge.
Evaluation
Ce projet ne doit utiliser aucune bibliothèque en dehors de celles fournies par défaut avec Python (sys, os, math, time, ...), du module pyOpenGL (OpenGL.GL, OpenGL.GLU et OpenGL.GLUT) ainsi que du module tkinter (ou autre GUI en Python, au choix de chacun).
Il doit être constitué de modules, comportant le nom de son auteur ainsi que la documentation. Le fichier principal contiendra, pour sa part, toutes les informations nécessaires à l'utilisation du programme final.
Les droits des fichiers seront choisis de tel sorte que les correcteurs puissent prendre connaissance de leur contenu. L'ensemble des fichiers sera rassemblé dans une archive ("tar file") au nom de l'étudiant et copiée dans le répertoire /home/partage/D23/2018.
La non observation de ces consignes simples sera systématiquement sanctionnée par des malus cumulatifs appliqués à la note finale.
La notation de ce projet prendra en compte : le respect du cahier des charges, l'efficacité, la présence d'options, ainsi que la qualité de la programmation (robustesse, lisibilité et modularité). Un classement des projets sera fait en fonction des résultats en temps à partir d'un fichier STL test et influera (positivement) la notation.