# Le BARMAN OpenGL

Projet ESSI3 - VIMM pour le cours de synthèse d'image de M.Buffa
Par BAEUMLER Cyrille et LUTTRINGER Benoit

Pourquoi un barman en OpenGl :

Le but de ce projet est de montrer le plus de fonctionnalités vues et acquises en OpenGl à travers une animation quelconque. Nous avons choisi de créer un barman dans une boite de nuit parce qu'il nous permettait d'aborder un maximum de notions à travers un personnage plutôt ludique.
Ainsi, nous avons créé une scène en trois dimensions que nous pouvons manipuler a l'aide de rotations, et nous y avons rajouté diverses fonctionnalités pour les lumières, l'animation, un miroir, les ombres, ...
En voici le détail.

Présentation du travail réalisé

Notre projet englobe toutes les connaissances que nous maitrisons à présent dans la bibliothèque openGL, à savoir :

1. La modélisation des objets 3D : apprendre à utiliser les fonctions de primitives géométriques telles que la sphère, les polygones.Savoir créer ses propres fonctions de primitives géométriques et utiliser les fonctions de transformations géométriques telles que la rotation, la translation et la mise à l'échelle. Apprendre à utiliser l'orientation des faces pour dessiner les bons côtés des polygones
2. La création et le positionnement des lumières : définir les différents paramètres d'une lumière (positionnement, type - positionnelle ou directionnelle -, couleur, atténuation,...)

   Les lumières mobiles | Lumière directionnelle | Lumière positionnelle | Lumière stromboscopique

3. Les différents modes de rendus : le mode points, le mode fil de fer, le mode flat et le mode smooth.

   Dots | Wireframe | Flat | Smooth

4. La réalisation d'une animation simple : définition d'une fonction idle qui permet de faire varier un paramètre au cours du temps, utiliser ce paramètre dans des transformations afin de faire bouger les objets de la scène.De plus, nous avons réalisé une animation de trois lampes qui tournent au dessus du barman.
5. La gestion de la transparence (blending) : pour dessiner le bar et prendre en compte le paramètre alpha (de transparence) de la couleur de celui ci, également pour la bouteille et le verre...
6. La réalisation d'un miroir à l'aide d'un stencil : permet de ne dessiner qu'un seul côté du miroir (le reflet) ainsi que la partie du barman seulement visible dans le miroir (il ne doit pas y avoir de reflet sur le bar)

   Miroir | Derrière le miroir |

7. Les utilisations d'effets spéciaux : l'ajout de brouillard, la gestion de l'antialiasing (attention, ça rame et ça produit des effets non désirables, probablement dus au blending utilisé).

Voici maintenant une liste exhaustive des fonctionnalités offertes par le Blue Boy Bar :

- Avec la Souris

  Bouton gauche | Simili boule virtuelle
  Bouton droit | Accès au menu (voir ci dessous)

- A l'aide du Menu accessible en cliquant sur le bouton gauche de la souris :
  Le menu :
  Et ce à quoi correspondent les différentes options

  Toggle motion | Bascule entre le mode animation et fixe
  Toggle light 1 | Lumière 1 : on/off
  Toggle light 2 | Lumière 1 : on/off
  Toggle light 3 | Lumière 1 : on/off
  Toggle light 1,2,3 | Lumières 1 et 2 et 3 : on/off
  Toggle SphereLight | Lumières mobiles : on/off
  Toggle texture | Texture du sol : on/off
  Toggle shadows | Ombre portée : on/off
  Toggle mirror | Miroir : on/off
  Toggle barman | Barman : on/off
  Toggle shadow stenciling | Utiliser ou pas le stencil pour l'ombre portée
  Positional light 1 | Lumière 1 : positionnelle
  Directional light 1 | Lumière 1 : directionnelle
  Positional light 2 | Lumière 2 : positionnelle
  Directional light 2 | Lumière 2 : directionnelle
  Positional light 3 | Lumière 3 : positionnelle
  Directional light 3 | Lumière 3 : directionnelle
  Toggle performance | Affichage des performances : on/off

- Directement par le Clavier:

  'd' | Mode points
  'w' | Mode fil de fer
  'f' | Mode flat shading
  's' | Mode smooth (lissage des faces)
  'z' | Mode antialiasing
  'a' | Mode animation (pareil que Toggle motion dans le menu)
  '+' | Augmente la vitesse d'animation
  '-' | Diminue la vitesse d'animation
  'f' | Ajout de brouillard
  'p' | Augmente la densité du brouillard
  'm' | Diminue la densité du brouillard
  'r' | Enclenche le miroir (pareil que Toggle mirror dans le menu)
  'E' | Effet stomboscope
  '1' | Lumière mobile 1 : on/off
  '2' | Lumière mobile 2 : on/off
  '3' | Lumière mobile 3 : on/off
  'q' | Quitter
  Esc | Quitter

  Voilà encore quelques bugs connus et autres fonctionnalités manquantes :

  - Il existe un petit problème au niveau de l'affichage de l'ombre du barman. En effet, celle-ci apparait en couleur (ce qui est relativement étrange pour un ombre). De plus, on ne gère la projection de l'ombre que sur le sol, elle est donc recouverte en partie par le bar. Pour règler ce problème, il aurait fallu projeter l'ombre également sur le bar.
  - On a quelques problème avec l'anti-aliasing qui provoque quelques perturbation à l'affichage (apparition des traits du mode fil de fer, deformation du rendu des couleurs, ...) en plus de ralentir l'animation de manière conséquentes.
  - On ne peut animer la scène qu'avec des rotations, on aurait également pu implémenter un zoom avant/arrière.
  - Les animations sont assez simples notre but étant de montrer qu'on avait compris leurs fonctionnement, mais on aurait pu améliorer les mouvements du barman (pour qu'il ne verse pas la boisson à coté du verre par exemple), ou le faire jongler avec des bouteilles comme dans un célébre film...
  - Et nombres d'autres possibilités que nous offre OpenGl...

  Et pour finir, un petit lien pour télécharger les sources du projet:

  - Les sources complètes et la page web en fichier .zip:...TELECHARGEZ
  - Sinon, juste l'executable du projet en .zip (inclus glut32.dll et glut32.lib):...TELECHARGEZ
  Quelques précisions :
  - le projet a été réalisé sous Visual C++. Pour l'ouvrir, il suffit d'ouvrir le fichier projet.dsw sous visual, les sources se trouvant dans le fichier Barman.c. Pour le lancer: ctrl-F5... et Hop!!!
  - pour ceux qui ont téléchargé uniquement l'executable, il suffit d'extraire le fichier zip tel quel à la racine du disque C (ne pas changer le nom du repertoire "openGl") puis de lancer l'executable.