TD 1 : visualiser un cube en 3d fil de fer
Introduction
Je vous propose un squelette de programme de visualisation 3D, le fameux
programme visu que vos ancêtres de maîtrise d'informatique
et de l'ESSI/DESS ont bien connu et dérivé en de multiples
variantes.
fichier cube.obj
Bien entendu, ce serait trop facile s'il n'y avait rien à faire
! Le squelette fourni se compile mais affiche une fenêtre vide !
Il va vous falloir "remplir les trous" pour le faire fonctionner, c'est
le but du TD : prendre en main les bouts de code qui vous sont fournis
et mettre en pratique ce que nous avons vu lors du premier cours.
Travail préliminaire
-
Récupérez l'archive du TD1 : visu.tgz,
cette archive contient les sources incomplets (mais qui compilent) du squelette,
le binaire de la correction (visu.correction), ainsi qu'un répertoire
OBJECTS rempli d'objets 3d qui vous serviront pour les prochains TD. Le
format de ces objets est "spécifique au cours" mais sachez cependant
qu'il s'agit d'objets 3d Studio convertis à l'aide d'un hack de
M.Buffa. Plus tard vous pourrez utiliser des routines qui lisent directement
ces formats, quand votre programme sera capable d'interpréter les
objets hiérarchisés.
Rappel : pour désarchiver : tar xvfz visu.tgz
-
Testez l'exécutable de la correction : visu.correction
-obj cube_tri.obj -bw
L'option -bw signifie "black & white". Si vous exécutez
le programme sans cette option, il fonctionne en mode couleur et vous aurez
une fenêtre noire. Il faudra la déplacer et cliquer
dedans pour voir apparaître le cube. Le mode couleur ne sera
utile que plus tard, dans les TDs suivants.
-
Familliarisez-vous avec les sources du squelette qui vous est presenté,
en regardant les fichiers dans l'ordre que je vous propose.
-
main.c : le programme principal, déclenche
la lecture des paramètres de la ligne de commande, la lecture sur
disque d'un fichier de description d'un objet et d'un fichier de description
de caméra, puis lance l'affichage.
-
param.h : definition d'un type servant pour mémoriser
les paramètres globaux de l'application (visualisation en couleur
ou en N/B, affichage des numéro des sommets en 3D, etc...)
-
object.h : description des types utilisés
pour décrire un objet (sommets, faces, etc...) et une caméra
(angles de vision en X et Y, taille de la fenêtre de visualisation,
position etc...). Remarquez en particulier qu'à un objet sont associés
3 matrices : la matrice Localtoglobal qui est aussi la matrice de positionnement,
son inverse GlobalToLocal, et la matrice permettant de passer du repère
objet vers le repère caméra. Regardez aussi le type VERTEX,
vous verrez qu'on stocke ici les coordonnées des points dans divers
repères.
-
object.c : contient les fonctions de lecture des
fichiers objet et caméra, plus des fonctions de déplacement
de la camera et des objets. Dans ce fichier il y adu code à écrire
!
-
graphics.c : initialisation de la fenêtre
X11, déclaration du double buffer, fonctions de dessin d'un objet,
etc.... dans ce fichier il y a du code à écrire dans la fonction
draw_object().
-
line_command_options.c : fonctions
utilitaires pour lire les paramètres de la ligne de commande.
-
matrix.h et matrix.c : fonctions
de calcul vectoriel et matriciel.
-
color.h et color.c : gestion
des colormaps, on verra plus tard.
TRAVAIL A FAIRE :
-
Ecrire le code manquant dans les fichiers objet.c et graphic.c, utilisez
vos notes de cours. PAS LE CODE FACULTATIF ! On verra
ça plus tard !