Programmation Graphique avec OpenGL

Introduction

Ce projet a été réalisé dans le cadre de mes cours en école d’ingénieur, où j’ai appris les bases de la programmation graphique avec OpenGL. Ce cours a pour objectif de nous initier à la création de scènes 3D en utilisant les techniques modernes de rendu graphique. À travers 12 vidéos j’ai découvert et mis en pratique des concepts tels que les shaders, le mapping de textures, les systèmes de caméra et les éclairages dynamiques.

Le projet final consiste à créer une scène 3D interactive et animée intégrant toutes les notions étudiées. Pour ma part, j’ai conçu un village en pleine forêt, avec des modèles 3D au style cartoon, un cycle jour-nuit dynamique, et une caméra virtuelle permettant d’explorer l’environnement.

Objectifs et structure du cours

Le cours, intitulé Introduction to Modern OpenGL, se concentre sur les bases et les applications pratiques d’OpenGL en utilisant une approche progressive. Voici les étapes principales :

  1. Création d’une fenêtre et gestion des entrées utilisateur
    À l’aide de la bibliothèque GLFW, j’ai appris à initialiser une fenêtre OpenGL et à capturer les entrées clavier et souris pour interagir avec la scène.

  2. Rendu de formes simples
    En envoyant des données à la carte graphique, j’ai commencé par dessiner des triangles, base de toute géométrie 3D.

  3. Shaders et textures
    Les shaders, écrits en GLSL, permettent de contrôler directement le rendu des objets. J’ai également découvert comment appliquer des textures pour enrichir l’apparence visuelle des modèles.

  4. Système de coordonnées et caméra virtuelle
    En configurant des matrices de modèle, de vue et de projection, j’ai pu simuler une caméra dynamique pour naviguer dans la scène.

  5. Éclairage avancé
    Enfin, j’ai implémenté plusieurs types d’éclairage, comme les points lumineux, les lumières directionnelles, et les spots, pour donner un réalisme supplémentaire à la scène.

Défi du projet final : Une scène 3D interactive

Le projet final consistait à concevoir une scène 3D en appliquant toutes les techniques apprises durant le cours. Mon objectif était de créer un environnement immersif et interactif tout en personnalisant le rendu pour refléter mon style.

Description de la scène

Ma scène représente un village au milieu d’une forêt, avec des éléments "cartoon" tels que des maisons colorées, des arbres simplifiés, et des accessoires comme des feux de camp ou des animaux. Voici les caractéristiques principales :

  • Éléments visuels : Tous les modèles sont chargés à partir de fichiers externes et affichés en utilisant les fonctionnalités d’OpenGL.

  • Éclairage dynamique : Le système d’éclairage inclut des transitions jour/nuit simulées par une variation progressive de l’intensité lumineuse et de la couleur de fond.

  • Caméra interactive : Une caméra virtuelle permet d’explorer la scène, contrôlée par le clavier (W, A, S, D) et la souris pour ajuster l’angle de vue.

  • Interactivité supplémentaire : Une lampe torche activable permet d’éclairer les zones sombres et de rendre l’expérience plus immersive.

Structure technique et fonctionnalités

Le projet repose sur une architecture modulaire, facilitant la gestion et l’extension du code. Voici les principaux modules et leurs fonctions :

  • Gestion de la caméra : La caméra virtuelle permet une navigation fluide grâce à une combinaison de mouvements FPS et de rotations via la souris.

  • Shaders GLSL : Les shaders contrôlent le rendu des objets, incluant la gestion de la lumière et des textures.

  • Éclairage : J’ai implémenté différents types de lumières (spots, points lumineux) pour rendre la scène plus réaliste.

  • Textures : Les textures ajoutent une dimension visuelle supplémentaire en appliquant des motifs réalistes ou stylisés aux objets.

  • Animation et interactivité : La lampe torche et les transitions jour/nuit sont des exemples d’interactivité qui enrichissent la scène.

Matrices de transformation

Trois matrices essentielles sont utilisées pour gérer la disposition des objets dans la scène :

  • Matrice de modèle : Positionne, oriente et échelle les objets.

  • Matrice de vue : Définit le point de vue de la caméra.

  • Matrice de projection : Ajoute une perspective réaliste pour donner une sensation de profondeur.

Résultats et démonstration

Le rendu final est une scène immersive avec des transitions lumineuses harmonieuses. Voici ce que vous pourrez observer dans ma vidéo de démonstration :

  • Exploration du village grâce à la caméra interactive.

  • Simulation du cycle jour/nuit avec un éclairage dynamique.

  • Utilisation de la lampe torche pour éclairer des zones spécifiques.

Accéder au Dépôt GitHub

Le dépôt GitHub de ce projet est accessible en cliquant sur le bouton ci-dessous. Ce dépôt contient :

  • Le code des vidéos suivies : Toutes les étapes du cours ont été codées et sont disponibles pour consultation, vous permettant de comprendre les concepts et leur application pratique.

  • Le code du rendu final : Dans le dossier Rendu, vous retrouverez l’intégralité du code source de ma scène 3D.