Simulation graphique temps réel d'écoulements d'eau sur surface 3D
Projet algorithmique de l'école 42 | C++ • OpenGL • GPU Computing
mod1 est un simulateur hydrodynamique en temps réel qui génère une surface 3D à partir de points de contrôle épars, puis simule différents comportements d'écoulement d'eau sur cette surface.
Le projet repose sur trois piliers techniques :
- Interpolation de surface — Génération d'un maillage 3D lisse à partir de quelques points de contrôle
- Simulation physique — Calcul temps réel de la physique de l'eau (montée progressive, vagues, pluie)
- Rendu GPU — Visualisation OpenGL avec calculs sur carte graphique
Vague déferlante en temps réel
Simulation de pluie avec accumulation dans un cratère
Simulation de l'ouverture puis la fermeture d'un trou dans le terrain
- ✅ Génération de surface — Interpolation d'une topographie 3D à partir de fichiers
.mod1 - ✅ Montée d'eau progressive — Simulation d'inondation uniforme recouvrant graduellement le terrain
- ✅ Vague déferlante — Vague arrivant latéralement et submergeant la surface
- ✅ Pluie — Simulation de précipitations avec accumulation progressive
- 🎨 Interface 3D interactive — Navigation caméra libre, contrôles intuitifs
- 🌊 Modes supplémentaires — Génération d'eau à un point précis, écoulement via un trou
- ⚡ Calculs GPU — Simulation physique entièrement calculée sur carte graphique (GLSL shaders)
- 🎥 Contrôle de caméra avancé — Rotation, zoom, panoramique temps réel
- 🎛️ Paramètres ajustables — Pause/Replay, avancement image par image, couleur de l'eau, précision du rendu
Prérequis : C++17, OpenGL, GLFW, Meson, Ninja
# Cloner le dépôt
git clone https://github.com/agtdbx/mod1.git
cd mod1
# Compiler avec Makefile (wrapper Meson)
make# Depuis le répertoire release/
./mod1 path/to/map.mod1| Touche | Action |
|---|---|
| Souris | Rotation de la caméra |
| Tab | Activer / désactiver le menu |
| WASD | Mouvements basiques |
| Espace/Lshift | Mouvements sur l'axe Y |
| Lctrl | Sprint |
| Flèches | Rotation de la caméra |
| ESC | Quitter |
mod1/
├── 2d_sim/ # Version 2D de la simulation en python
├── data/ # Shaders et textures
├── flood/ # Algo de génération de
├── map/ # Fichiers .mod1 de test
├── srcs/ # Code source C++
├── subprojects/ # Dépendances (GLFW, GLM, etc.)
├── meson.build # Configuration build Meson
├── Makefile # Wrapper de build
├── README.md # Ce fichier
└── vsupp # Ficher de suppression valgrind
Le maillage 3D est généré par interpolation polynomiale à partir des points de contrôle fournis dans le fichier .mod1. L'algorithme garantit :
- Continuité de la surface (pas d'arêtes vives)
- Altitude nulle aux bords de la scène
- Résolution de grille adaptative selon la densité de points
L'eau est simulée en temps réel sur GPU via compute shaders OpenGL :
- Physique de l'eau basé sur des particules
- Interaction avec la topographie (accumulation dans les creux)
Map :
- Mesh 3D rendu via OpenGL avec (vertex/fragment shader).
Eau :
- Mélange de raycasting 3D et raytracing pour détecter le terrain (fragment shader)
- Ray marching pour le rendu des particules d'eau (fragment shader)
Menu :
- Mesh 3D rendu via OpenGL avec (vertex/fragment shader).
Ce projet de l'école 42 vise à maîtriser :
- ✅ Algorithmes d'interpolation et génération de surfaces
- ✅ Bases de la simulation physique (fluides, gravité)
- ✅ Programmation graphique GPU (OpenGL, shaders GLSL)
- ✅ Gestion de projet C++ structuré (build systems, dépendances)
- ✅ Optimisation temps réel (calculs parallèles, pipeline GPU)
- OpenGL 4.3+ (compute shaders)
- GLFW (gestion fenêtre et input)
- GLM (mathématiques 3D)
- Meson + Ninja (build system)
- C++17 (compilateur compatible : GCC 9+, Clang 10+)
Projet pédagogique école 42 — Usage éducatif uniquement.
Auguste Deroubaix (agtdbx) 🔗 GitHub • 🎓 Étudiant 42
Liam Flandrinck (LekaUila) 🔗 GitHub • 🎓 Étudiant 42