Académique / InfographieProjet académique2024–2025

Rendu 3D OpenGL

Moteur de rendu 3D en C++ et OpenGL intégrant chargement OBJ/MTL, éclairage Phong, environnement cubemap, rendu HDR et tone mapping.

Scène OpenGL montrant un cube texturé, un tore et un modèle d’avion dans un environnement cubemap enneigé.

Scène OpenGL montrant un cube texturé, un tore et un modèle d’avion dans un environnement cubemap enneigé.

Technologies

  • C++
  • OpenGL 3.3
  • GLSL
  • GLFW
  • GLEW
  • TinyOBJLoader
  • OBJ / MTL
  • HDR FBO
  • Cubemap

Ce que j’ai développé

  • Chargement OBJ et MTL
  • Rendu VAO / VBO / IBO
  • Textures diffuses en sRGB
  • Éclairage Phong
  • Ambiante hémisphérique
  • Fresnel-Schlick
  • Éclairage de contour et arrière
  • Environment mapping et skybox cubemap
  • UBO ViewProj et caméra orbitale
  • Framebuffer HDR GL_RGBA16F
  • Tone mapping Reinhard et correction gamma

Contexte

Projet académique en C++ construit autour d’OpenGL 3.3 Core Profile et d’une scène 3D navigable.

Problème

Le moteur doit charger la géométrie OBJ et les matériaux MTL, conserver un flux d’éclairage linéaire, rendre un environnement puis convertir la sortie HDR pour l’affichage.

Implémentation

TinyOBJLoader lit les ressources OBJ et MTL avant le transfert de la géométrie vers des buffers VAO, VBO et IBO. Les textures diffuses, les coefficients de matériaux et une caméra orbitale alimentent le pipeline de rendu.

Les shaders combinent éclairage Phong, contribution ambiante hémisphérique, Fresnel-Schlick, éclairage de contour et arrière, environment mapping et skybox cubemap.

Architecture technique

Les matrices de vue et de projection sont partagées via un UBO ViewProj. La passe 3D dessine dans un framebuffer GL_RGBA16F avant une passe de post-traitement plein écran.

Décisions d’ingénierie

Les textures de couleur diffuse utilisent des formats sRGB afin que les calculs des shaders restent en espace linéaire. Le tone mapping Reinhard et la correction gamma sont appliqués après le rendu HDR.

Difficultés

Le pipeline de couleur doit conserver les calculs d’éclairage en espace linéaire alors que les textures arrivent en sRGB et que la sortie finale revient vers l’espace d’affichage. L’environment mapping et le post-traitement demandent aussi une gestion claire des unités de texture et des passes de rendu.

Ce que j’ai appris

Le projet relie le chargement des ressources, l’organisation des buffers GPU, les shaders d’éclairage, l’état de la caméra et le post-traitement dans un même pipeline de rendu inspectable.

Preuve visuelle

Deuxième vue de la scène OpenGL et de son environnement cubemap depuis la caméra orbitale.