Visualiseur 3D et Générateur de contour 2D (WIN32)
publié le samedi 12 août 2006 (vu 688 fois)

Il s’agit d’un logiciel de visualisation d’objets 3D supportant les textures.
C’est un vieux projet sur lequel j’ai travaillé dans le but de générer automatiquement une vue 2D d’un objet 3D.
La portabilité n’ayant pas été de mise, l’environnement de développement utilisé se limite à Win32.
Modifier le programme pour le rendre portable nécessite l’utilisation d’une bibliothèque capable de gérer menu et treeview.

JPG - 94.5 ko
Capture d’écran

Quelques explications quand au fonctionnement du programme en lui même :

Il peut lire 3 formats et on peux facilement en ajouter :
- Wavefront OBJ (format texte)
- 3D Studio
- Milkshape (au format binaire)

Il y a des options d’affichage, il supporte le glisser/déplacer (drag’n drop), il calcule et peut afficher les bounding boxes, si l’objet est composé de plusieurs parties on peut en désactiver, on peux visualiser d’un simple clic une partie de l’objet, l’arborescence de l’objet sert d’interface aux manipulations, une fonction permet de "poser l’objet au sol" (pas de coordonnées en dessous de la verticale 0), fonction d’optimisation de l’objet retirant les vertices en doubles et les faces qui ont 2 points communs, fonction de génération de silhouette.
Pas de fonction de sauvegarde : à vous de d’intégrer celle que vous voulez.

Vous pouvez donc trouver dans le code des tas de trucs qui peuvent vous plaire, entre autres :
- des fonctions de math (vecteurs, matrices, ...)
- une classe de gestion de textures
- une classe de gestion de fichier log
- une classe de gestion d’objet 3D
- de la gestion de fenêtre en Win32
- une fonction de chargement JPEG !!
- une petite classe de gestion du temps
- une classe de chargement 3DS
- une classe de chargement milkshape
- une fonction de chargement OBJ wavefront
- du treeview
- gestion d’un fichier .ini pour les préférences et d’autres encore ...

Quelques petites explications sur le fonctionnement :
La partie gauche affiche la 3D, la droite sert pour la 2D.
Le chargement d’un fichier se fait via le menu Fichiers -> Charger 3D (vous aviez devinés ^^) ou vous glissez/déposez le fichier dans l’application.

Dans Affichage 3D vous pouvez activer/désactiver/modifier des options d’affichage pour la 3D.
L’option Afficher uniquement la sélection permet de n’afficher que les éléments qui sont actifs (plus d’explications un peu plus loin).

Dans Affichage 2D vous pouvez activer/désactiver/modifier des options d’affichage pour la 2D cette fois. La première possibilité lance le générateur de silhouette et celle-ci est automatiquement affichée dans la partie 2D. L’option Silhouette unicolore affiche la silhouette d’une seule couleur (modifiable), si elle est désactivée alors chaque élément de la 2D est affiché avec la couleur de l’élément 3D correspondant.

Dans le menu Options se trouve la fonction d’optimisation de la 3D qui consiste à lier les points qui sont confondus et qui peut rendre la 2D plus légère (tout comme la 3D d’ailleurs). Je vous conseille de générer une première fois la 2D puis d’optimiser la 3D et de régénérer encore une fois la 2D et constater la différence. Le menu Options contient aussi la fonction Poser l’objet 3D au sol qui va simplement modifier l’élévation de tous les points de l’objet afin qu’aucun d’entre eux ne se trouve sous la coordonnée 0.

Les manipulations en 2D et 3D sont les mêmes :
- Clic gauche maintenu, déplacer la souris pour faire tourner l’objet.
- Clic droit maintenu, déplacer la souris pour (dé)zoomer.
- Clic avec le bouton du milieu, déplacer la souris pour déplacer la vue (en 3D elle ne se déplace pas Verticalement).

Pour terminer, lorsqu’un objet est chargé, une fenêtre apparait avec un "treeview" (un arbre façon windows explorer). Ce treeview contient le nom du fichier 3D chargé suivi de tous les éléments qui composent l’objet. Le clic gauche sélectionne l’élément, un clic sur le nom du fichier sélectionne l’objet complet (selon les éléments actifs). Le clic droit (dés)active un élément, cliquer sur le nom de l’objet inverse l’état de chaque élément (les actifs se désactivent et vice versa), cliquer sur un élément inverse sont état 3D et 3D, cliquer sur le + pour voir l’état de la 2D et de la 3D séparément et un clic droit sur létat de la 2D ou de la 3D permet de le modifier indépendamment. La fonction Afficher uniquement la sélection de la 2D et de la 3D tient compte de ces états et il faut que l’objet général (clic gauche sur le nom de fichier) soit sélectionné.

Si vous supprimez le fichier .ini ou s’il n’y en a pas, le programme le recrée automatiquement lorsque vous quittez.


Le code source qui est fourni n’a pas été retravaillé. Il comporte peu de commentaires mais je pense qu’il est assez clair pour que les bout de code qu’il contient puissent être réutilisés sans difficultés.
De même, si vous veniez à vouloir faire évoluer le programme, cela ne devrait pas être trop difficile de s’y retrouver.
Néanmoins, je vous souhaite bon courage ;-)

Code source et executable Windows (fichier Zip de 302.6 ko)