Exercice OpenGL

composant_page_inclusion 100051
MECA2170 - Projet OpenGL

MECA2170 - Projet OpenGL

L'énoncé 08-09 du projet : Une boule qui tombe à l'eau

Imaginez une boule de billard tombant dans un bac rempli d'eau. L'eau est initialement au repos et la boule est lachée un peu au-dessus de la surface. La boule va pénétrer dans l'eau, mettre en mouvement la surface de l'eau et rebondir dans le fond du bac avant de s'immobiliser. La surface d'eau va elle aussi bouger avant de revenir progressivement à un état de repos.

Votre tâche est d'écrire un programme C ou C++ utilisant les librairies OpenGL et permettant la visualisation du mouvement de la boule et de la surface de manière crédible dans une fenêtre de 500x500 pixels. Il faut donc -en particulier- tenir compte du contact entre le fond du bac et la boule, et des rebondissements de celle-ci, et imaginer une déformation plausible de la surface d'eau.

Les consignes :

      
  • Ce travail est réalisé par groupe de deux étudiants.   
  • le fond du bac doit posséder un minimum de relief afin d'observer un mouvement sympa de la boule, à vous de l'imaginer. Il n'est pas nécessaire de faire quelque chose de complexe, quelques arêtes ou courbes suffisent.   
  • La boule est à l'arrêt quand on lance le programme, et la caméra est placée de manière à voir l'ensemble du bac et la boule. Lors d'un clic sur le bouton gauche de la souris, la boule est lâchée. Un clic du bouton droit de la souris permet d'alterner entre la vue externe et la vue qu'aurait un utilisateur fixé sur la boule. La touche ESC permet d'arrêter le programme. Il y a un argument de ligne numérique (entre 1 et 100) permettant d'accélérer ou de ralentir la gravité et donc la vitesse de chute.   
  • Vous devez nous fournir un unique fichier contenant l'entièreté de votre programme en C ou en C++. En commentaires et en entête du fichier, vous indiquerez vos noms et années d'études, les remarques et commentaires éventuels que vous souhaitez adresser au correcteur, le mode d'emploi de l'application et toutes vos sources d'inspiration (et ce de manière sérieuse, honnête et correcte). Copier et s'inspirer d'autrui est une très bonne manière de procéder, mais s'attribuer de manière malhonnête le travail d'autrui est petit et mesquin. Tout manquement constaté sur vos références entraînera une cote nulle pour l'exercice : on sera impitoyable comme pour le dopage aux JOs. Vos références seront incluses dans les commentaires de votre fichier source.   
  • Si vous êtes bien lancés et que vous ne savez plus vous arrêter, vous pouvez aussi remplacer la boule par votre objet préféré.
  • Vous envoyez le code source de votre programme par courriel à l'assistant du cours au plus tard le 31 octobre 2008.

Quelques références (disponibles à la bibliothèque INGI)

  • OpenGL Programming Guide : -second edition - The Official Guide to Learning OpenGL, version 1.1, Mason Woo, Jackie Neider, Tom Davis, (Addison-Wesley, 1997).
  • OpenGL Reference Manual - second edition - The official reference document to OpenGL, version 1.1, Renate Kempf, Chris Frazier (Addison-Wesley, 1998)
  • OpenGL programming for the X Window system, Mark J. Kilgard (Addison-Wesley, 1997).

Comment compiler avec votre ordinateur sous Linux ?

Les distributions modernes sont très faciles à installer (fini le temps où il fallait passer 2 jours pour configurer X) et sont l'environnement idéal pour compiler des applications C.

Seuls certains portables posent encore parfois (rarement) des problèmes existentiels pour Linux. Cependant, pour exécuter une application OpenGL, il vous faudra installer les drivers (la plupart du temps propriétaires) de votre carte vidéo. Les grands standards nVidia et ATI sont en général bien supportés (quoique ...).

La distribution recommandée par l'assistant est Ubuntu. C'est une distribution grand public, avec un installeur graphique et les drivers vidéos ATI et nVidia précompilés. De plus, la communauté Ubuntu étant très active, vous trouverez pléthores de forums vous aidant à installer et configurer votre machine.

Pour pouvoir compiler, vous devez installer différentes composantes :

  • gcc le compilateur libre, et make (pas indispensable mais très pratique).
    Packages à installer : build-essential (metapackage reprenant tout ce qui est nécessaire au programmeur), ou gcc et make
  • Les librairies OpenGL et leurs sources (glut et mesa).
    Packages à installer : freeglut3, freeglut3-dev, libgl1-mesa-dev, libglu1-mesa-dev et mesa-common-dev

Pour les autres distributions, vous devez installer les mêmes composants, et les packages correspondant doivent avoir des noms similaires.

Comment compiler avec votre ordinateur sous Windows ?

Si vous disposez de Visual Studio, vous pouvez suivre les instructions fournies par Quentin Colmant (MAP23 2005-2006) en ayant au préalable téléchargé les librairies nécessaires.

Une autre option consiste à installer cygwin sur votre machine Windows et de compiler directement avec un makefile. Toute l'information la plus récente est disponible sur le web. N'ayant pas d'ordinateur sous Windows-Vista, il m'est difficile de vous fournir plus d'informations à ce sujet.

Pour compiler en salle didactique

Pour obtenir un exécutable sur les PCs sous Linux "candux#" la compilation et l'édition de lien se font via la commande :
gcc -I/usr/include \
*.c -O2 -ansi -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE \
-lglut -lGLU -lGL -lm \
-L/usr/lib/X11/lib -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lSM -lICE

En quelques mots, les diverses arguments lors de la compilation et de l'édition de liens peuvent s'interpréter comme suit :

  • -I... indique au compilateur ou trouver les fichiers .h (dans la directory "/usr/include").
  • -O2 -ffast-math permet d'optimiser le code : ca ira plus vite !
  • -ansi spécifie que l'on ne veut utiliser que du C totalement standard : essentiel pour avoir du code portable sur un autre ordinateur !
  • -D... specifie au pré-processeur ("cpp") quel est la version du code à considérer.
  • -L... indique au compilateur où trouver les librairies de X11 (dans les directories "/usr/lib/X11/lib" et "/usr/X11R6/lib").
  • -lglut ... indique qu'on utilise la libraire Glut est une boîte à outils specialisée de plus haut niveau pour OpenGL.
  • -lGLU -lGL ... indique qu'on utilise les libraires Glu et GL.
  • -lX11... indique qu'on utilise les libraires de système de fenêtres du MIT : X11, Xext, Xmu et Xi.

L'ordre des librairies n'est pas innocent, il s'agit normalement de citer d'abord les librairies de plus haut niveau qui se basent sur celles du plus bas niveau.

Il est possible que temporairement, sur certains PCs de l'environnement facultaire, l'include "glut.h" ne soit pas disponible (la distribution automatique du package glut-dev le contenant est en cours de réalisation par notre équipe facultaire informatique bien-aimée). Dans ce cas, une solution simple consiste à créer un répertoire GL dans la directory courante et d'y recopier le fichier glut.h à l'intérieur.

Documentation

  • API Glut (HTML / PDF) : la description de toutes les fonctions de la librairie glut.
  • API Glu (PDF).
  • Les pages de man de GL, GLU et GLUT.
  • Le site web OpenGL.org fournit pas ma de documentation pour ceux qui débutent.

Des exemples

Quelques liens potentiellement utiles


| 27/11/2007 |