Visualiseur 3D

Présentation

Ce Visualiseur 3D était un projet de Licence.
Il est écrit en Scheme et permet de construire, visualiser et manipuler différents objets 3D. L'utilisation est assez simple. On peut contrôler 4 différentes cameras. Une animation est possible afin de visualiser les étapes intermédiaires pour passer d'une caméra a l'autre.

Photos d'écran:

Manipulation Objet 1


Affichage d'un objet complexe composé de plusieurs carrés.

Manipulation Objet 2


Affichage d'un objet complexe comportant un carré en son centre. La perspective est un peu plus prononcée.

Extrusion Création


Dessin de la forme géométrique qui va subir une extrusion.

Extrusion Visualisation


Affichage de l'objet après l'opération d'extrusion (un bonhomme).

Rotation Création


Dessin de la forme géométrique qui va subir une rotation.

Rotation Visualisation


Affichage de l'objet après l'opération de rotation (une bouteille).

Couleurs


Le couleurs des facettes de l'objet peuvent être changées aléatoirement.

Explosion


Toutes les facettes de l'objet peuvent être déplacées individuellement en 2D.

Fil de Fer


L'affichage de l'objet peut se faire en fil de fer.

Animation


Utilisation de la caméra résultante afin de créer un animation entre les 4 différentes caméras.

Langage utilisé

Ces programmes sont écrit en Scheme. Il s'agit d'un langage fonctionnel proche du Lisp.
Il est fortement basé sur la récursivité. ce langage est très surprenant, et si il n'est pas très intuitif, au début, on s'y habitue vite on on prend un certain plaisir a l'utiliser.
En exemple, voici le morceau du code nécessaire a l'exécution du programme.
;------ Retourne une liste de points ayant subis un rotation d'axe y (define (Rotation_points L angle) (let ((A (cos angle)) (B (- (sin angle))) (C (sin angle)) (resultat '())) (do ((ptr L (cddr ptr))) ((null? ptr) resultat) (let ((x (/ (car ptr) Reduction)) (y (/ (- decaly2 (cadr ptr)) Reduction))) (set! resultat (cons (make point :xp (* A x) :yp (* C x) :zp y) resultat)))))) ;------ Cree une liste de faces a partir de 2 listes de points (define (Cree_faces L1 L2 c) (let ((resultat '())) (do ((ptr_1 L1 (cdr ptr_1)) (ptr_2 L2 (cdr ptr_2))) ((null? (cdr ptr_1)) (cons (make face :couleur c :Lsommets (list (car ptr_1) (car ptr_2) (car L2) (car L1))) resultat)) (set! resultat (cons (make face :couleur c :Lsommets (list (car ptr_1) (car ptr_2) (cadr ptr_2) (cadr ptr_1))) resultat))))) ;------ Cree un l' objet 3D (Objet_cree) a partir de la rotation de Objet2D autour de l'axe des x (define (Cree_Objet_Rotation tranches c) (if (or (null? objet2d) (null? (cddr objet2d)) (null? (cddddr objet2d))) (set! Objet_Cree '()) (let ((lstpoints '()) (lstfaces '())) (do ((ntranche 0 (+ ntranche 1 ))) ((= ntranche tranches)) (set! lstpoints (cons (Rotation_points objet2d (* ntranche (/ (* 2 PI) tranches))) lstpoints))) (do ((ptr lstpoints (cdr ptr))) ((null? (cdr ptr)) (set! lstfaces (cons (Cree_faces (car ptr) (car lstpoints) c) lstfaces))) (set! lstfaces (cons (Cree_faces (car ptr) (cadr ptr) c) lstfaces))) (set! Objet_Cree (list (make objet :Lfaces (apply append lstfaces) :Lpoints (apply append lstpoints)))))))

Les sources du programme :

Les sources du programme sont accessibles ici : Viewer3D-sources_V1.0.zip.
Pour interpréter ces fichiers sous Windows vous devrez décompresser le fichier suivant de 3 Mo: STkWin32.zip.
Une fois décompressé, copier les fichiers *.stk du programme (contenus dans le premier *.zip téléchargé) dans le sous répertoire "STkWin32\STk\MS-Win32". Lancer ensuite le .bat envdraw.bat contenu dans ce même répertoire. Choisissez "File->Load" et sélectionnez enfin le fichier "Viewer3D.stk".
Le programme devrait se lancer.