Computer Graphics

OpenGL 3.3 Core Rendering Engine — C++ / GLSL — ESIEE Paris, E4FI (2026)


Computer Graphics background
📌 Description

Project developed in OpenGL 3.3 Core Profile (GLSL 330) by AUBRY Mathias and TOUSSAINT Nolan. It is a real-time 3D rendering engine implementing a complete pipeline: model loading, direct and indirect lighting, off-screen rendering, and post-processing, featuring a real-time control interface.

Computer Graphics project scene

Project scene

🖼️ Rendering & Display
  • 3D Model Loading: four objects displayed simultaneously — Kirby, Miles Morales, and Gamma loaded from .obj files via TinyObjLoader (.mtl materials and textures via stb_image), and the Dragon loaded from a raw data array.
  • Direct Lighting (Phong / Blinn-Phong): diffuse (Lambert) and specular (Phong and Blinn-Phong) components combined with OBJ textures and materials.
  • Indirect Lighting: hemispherical ambient light (ground/sky interpolation based on the normal) and Fresnel-Schlick approximation, featuring material presets (gold, water, silver, bronze).
  • Off-screen Rendering (FBO): main rendering performed inside a Framebuffer Object, copied to the backbuffer via a full-screen quad to enable post-processing; gamma correction via GL_FRAMEBUFFER_SRGB.
🧭 Navigation
  • Object Placement: each model has its own world matrix (Translation × Rotation × Scale), adjustable in real time.
  • Camera UBO: view and projection matrices grouped within a Uniform Buffer Object shared between the main shader and the skybox shader.
  • Orbital Camera: orbits in spherical coordinates around the origin — left-click + drag to rotate, scroll wheel to zoom, R key to reset the view.
⚙️ Options

8 post-processing effects selectable via ImGui (applied in full screen on the FBO texture): none (passthrough), color inversion, black & white, box blur (3×3), sepia, edge detection (convolution kernel), chromatic aberration, pixelation.

Cubemap Skybox with 6 faces (PNG), sharing the camera UBO and drawn last using GL_LEQUAL.

ImGui Interface to adjust materials and textures for each object in real time, along with their position, scale, camera parameters, post-processing effects, and the Fresnel reflectivity preset.

🛠 Dependencies
🎮 Controls
  • Orbit camera: Left click + drag
  • Zoom: Mouse wheel
  • Reset camera: R key
  • Quit: Esc key
👥 Team
  • AUBRY Mathias
  • TOUSSAINT Nolan
📜 License & Credits

This project was carried out within an academic framework (ESIEE Paris, E4FI) and is not intended for commercial distribution. Third-party libraries (TinyObjLoader, stb_image, Dear ImGui) are used under their respective licenses.

Find my GitHub and LinkedIn links as well as my projects in the section below

Unsplashed background img 3