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>

  • 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

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

6 - Evaluation du projet

<note important>

  • Rendu du projet (avec démonstration) : vendredi 12 janvier 2018
  • Vous devrez également déposer sur TOMUSS une archive de vos fichiers sources dans la colonne Depot-FZ

</note>