M2 Image Développement et Technologies 3D
Projet : simulation d'objets basée sur la dynamique Newtonienne
1 - Récupération du code
<note important> Pour ceux qui ont suivi l'UE animation en M1 : la base de code n'est pas au même endroit que l'année passée et l'arborescence a été modifiée</note>
- Nous allons utiliser la librairie gKit2 light développée par Jean-Claude Iehl
- Le code de départ (code source de la librairie gkit2light + code pour ce TP - répertoire gkit2light/src/master_MecaSim) se récupère avec Git comme ceci :
git clone https://forge.univ-lyon1.fr/Alexandre.Meyer/gkit2light cd gkit2light/ git checkout -b master_MecacSim origin/master_MecacSim
2 - Compilation du code
- Pour compiler le code sous Linux - codeblocks :
cd gkit2light premake/premake4.linux --file=master_MecaSim.lua codeblocks ouvrir le projet master_MecaSim_etudiant.cbp
- Pour compiler le code sous Linux - makefile :
cd gkit2light premake/premake4.linux --file=master_MecaSim.lua gmake make -f master_MecaSim_etudiant.make ./bin/master_MecaSim_etudiant
- Pour compiler sous Linux de chez vous (ubuntu) :
- Voir le apt-get install ici
- Puis reprendre les instructions mises ci-dessus
- Pour compiler le code sous Mac - makefile :
cd gkit2light premake/premake4.macosx --file=master_MecaSim.lua gmake make -f master_MecaSim_etudiant.make ./bin/master_MecaSim_etudiant
- Pour compiler sous windows chez vous avec CodeBlocks
- Installez Git avec tortoiseGit
- Installez Codeblocks, la version 16 avec Mingw
- Explorateur de fichier, placez vous dans le répertoire de vos fichiers, bouton droit menu 'TortoiseGit puis cloner', puis entrez le chemin Git indiqué plus haut commençant par https …
- Téléchargez les librairies (SDL,Glew, etc.) pour windows ici, copiez le répertoire 'extern' dans le répertoire principale de gkit2light
- Vous devez aussi copier toutes les .dll du répertoire extern/mingw/lib dans gkit2light/bin (répertoire des exécutables), sinon vous aurez des erreurs à l’exécution des programmes
- Lancez le script gkitlight/premake/premake-meca.bat qui va créer les projets makefile/codeblocks dans le répertoire gkitlight
- Ouvrez le projet gkitlight/master_MecaSim_etudiant.cbp
- Remarque : le code exporté avec Git contient une version compilée des librairies (SDL2, glew, etc.) pour windows donc rien à installer
- Si vous avez une erreur de compilation
- Changez build target en debug|x32 au lieu de debug|x64.
- Si l'erreur provient de M_PI qui n'est pas reconnu (malgré le #include <math.h>), il faut rajouter le code suivant dans le fichier gkit2light/src/master_MecaSim/src-etudiant/Matrix.cpp juste après les includes
#ifndef M_PI #define M_PI 3.14159265358979323846264338327950288 /* pi */ #endif
- Pour régler des soucis au niveau de l'affichage
- Rajouter le code suivant dans le fichier gkit2light/src/master_MecaSim/src-etudiant/Viewer-init.cpp - dans la fonction Viewer::init() avant l'instruction m_camera.lookat( Point(0,0,0), 15 );
int Viewer::init() { // Etats par defaut openGL glClearColor(0.5f, 0.6f, 0.8f, 1); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearDepthf(1); glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); glFrontFace(GL_CW); glCullFace(GL_BACK); if (mb_cullface) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE); // good for debug glEnable(GL_TEXTURE_2D); ... }
3 - Lancer l'application depuis le répertoire gkit2light
- Le programme nécessite de mettre en paramètres, le nombre d'objets de la simulation, le fichier des paramètres généraux de la simulation, ainsi qu'un fichier de paramètres pour chacun des objets simulés.
- Si vous lancez l'application sans paramètre, il prendra les paramètres qui ont été écrits directement dans le fichier src-etudiant/main.cpp. Il faudra ainsi les modifier directement dans le code et recompiler, si vous souhaitez les changer.
- Sinon, nous avons créé un fichier qui s'appelle go dans le répertoire gkit2light
- Nous avons mis dedans l'instruction suivante afin de donner les paramètres nécessaires :
./bin/master_MecaSim_etudiant 1 ./src/master_MecaSim/exec/Fichier_Param.simu ./src/master_MecaSim/exec/Fichier_Param.objet1
- Et pour le convertir en exécutable, nous avons fait :
chmod +x go
- Vous pouvez ainsi lancer le programme en tapant dans un terminal depuis le répertoire gkit2light
./go
- ou de manière générale : <Executable> <nbObjet> <fichier param simulation> <fichier param Obj1> <fichier param Obj2> …
4 - Comprendre le code
5 - Réaliser le TP
- Pour ceux qui n'ont pas suivi l'UE Animation en M1 : commencez par Animation de textiles
- Pour ceux qui ont suivi l'UE Animation en M1 : passez directement à Animation d'un objet rigide
- Et ensuite : passez à Animation SPH
D'autres idées pour vous amuser
- Faire une belle scène avec plusieurs objets de modèles physiques différents (objet déformable avec système masses-ressorts, objet rigide, SPH), des textures sur les objets, etc. Gérer les collisions entre les objets : tissu qui tombe sur une sphère, une table, un cube, etc.
- Des ballons (particules) qui se déplacent dans un labyrinthe. Un curseur permet de déplacer la direction du vent qui souffle pour déplacer les ballons.
- Animation d'un système de particules soumis à la gravité et qui rentrent en collision avec la grille horizontale positionnée en y=0. La class ObjetSimuleParticule a été faite pour cela. On utilise les fichiers employés pour le système masses-ressorts, mais on ne connecte pas les masses par des ressorts. Il faut juste compléter le fichier CalculsParticule.cpp pour gérer les collisions.
- Faire rebondir un objet rigide sur le sol
- …