- Description générale
L'objectif du projet est l'implémentation d'une bibliothèque graphique en Common LISP (sous forme de package). Cette implémentation formera un sous-ensemble d'OpenGL.
Les buts principaux sont de respecter la syntaxe
d'OpenGL autant que possible tout en utilisant au maximum les
ressources mises â notre disposition par le langage, notamment
les macros. De cette façon, on va retrouver les mêmes
mots clefs, réalisant les mêmes opérations, qui
seront utilisés de manière différente suivant les avantages qu'on
peut tirer du langage.
Nous souhaitons donc déterminer s'il est réaliste de concevoir une
bibliothèque de type OpenGL en Common Lisp.
Les avantages attendus
sont de grandes facilités pour le temps réel, la lisibilité et la
maintenance du code.
Les obstacles potentiels concernent a-priori les performances.
- Documentation, Références
Concernant le langage Common Lisp:
- Paul Graham, "ANSI Common Lisp", Prentice Hall.
- Paul Graham, "On Lisp Advanced Tedhniques for Common Lisp", Prentice Hall.
- Robert A. MacLachlan, "CMU Common Lisp User's Manual".
- "CLX : Common LISP X Interface", Texas Instruments.
- Ken Pitman, "The Common Lisp Hyperspec", Harlequin group ltd.
- Guy Steele, "Common Lisp, the language".
- David B.Lamkins, "Successful Lisp: How to Understand and Use Common Lisp".
Concernant la 3D:
- "OpenGL Reference Manual", Second Edition, Addison-Wesley.
The Official Reference Document to OpenGL, Version 1.1
- "OpenGL Programming Guide", Second Edition, Addison-Wesley.
The Official Guide to Learning OpenGL, Version 1.1
- "The OpenGL Graphics System : A Specification", Version 1.2.1
- Foley, Van Dam, Feiner, Hughes, Phillips, "Introduction à l'infographie", Addison-Wesley
- Ressources
- Le projet doit pouvoir être utilisé sur PC et le langage
utilisé est le Common LISP. Le compilateur-interpréteur utilisé est
CMU CL, celui-ci permet d'accéder aux ressources X grâce au
package CLX. Celui-ci offrira ainsi les primitives de base
essentielles au fonctionnement du projet.
- Pour développer le projet en contrôlant les versions au fur
et à mesure, nous utiliserons cvs (usage en reseau, fichiers non
bloqués).
- Pour assurer un niveau minimal de performance, nous avons besoin
d'outils de timing (chronométrage de l'execution) et de profiling
(évaluation fonction par fonction des ressources CPU ou mémoire
consommées).
Nous emploierons les outils de CMU-CL pour le timing et le profiling,
complétés éventuellement par ceux d'Allegro Common Lisp 5 (Franz Inc.).
- Pour vérifier la correction du code, nous aurons recours aux
fonctions de débuggage de CMU-CL.
Nous utiliserons aussi un utilitaire de couverture, dans le but de
verifier si toutes les lignes de notre programme peuvent s'exécuter
sans erreur.
Nous emploierons le programme Cover de Richard
(Dick) Waters. Ce dernier a eu l'aimabilité de nous le faire parvenir
par mail.
- Planning
- Tracé: points, lignes, triangles avec remplissage => 2 semaines (surestimé)
- Projection perspective avec clipping par rapport à un
frustum => 3 semaines (risque de dépassement car cette partie
est la plus longue)
- Transformations standards sur les vertices: translation, rotation, scaling => 3 jours
- Gestion de la caméra => 2 jours
- Eclairage: flat et gouraud avec une seule source de lumière => 1~semaine
- BackFace Culling en window coordinate pour éviter du tracé supplémentaire => 1 jour
- Documentation => ? semaines (réalisé au fur et à mesure)
- Manuel utilisateur => ? semaines
- mémoire => ? semaines (réalisé au fur et à mesure)
- Délivrables
Un cahier des charges, un mémoire, un manuel utilisateur, un manuel de
maintenance et un manuel de programmation.