VectorGL – Moteur 3D en OpenGL

VectorGL est un moteur de rendu 3D conçu en C++ avec OpenGL. Il est multi-plateformes (Windows, Linux, MacOS) et léger.

Un aperçu du moteur

Retrouvez le projet sur GitHub: https://github.com/razor7877/VectorGL

C’est un moteur basique que j’ai développé en partie pour approfondir mes connaissances en C++, mais surtout pour apprendre le fonctionnement de l’API OpenGL. J’ai commencé à travailler dessus il y a un peu plus de 2 ans, et j’y rajoute des fonctionnalités de temps en temps.

Aujourd’hui, il commence à être relativement utilisable. Il est possible de charger des modèles 3D à la volée en faisant un glisser-déposer des fichiers sur la fenêtre. Un graphe représente la scène: on peut interagir avec les différents éléments (position, rotation, mise à l’échelle), les cacher, les supprimer, et il existe une hiérarchie de ceux-ci.

La librairie ImGui permet de créer les interfaces. GLFW sert pour la gestion des fenêtres et du contexte OpenGL. Assimp est utilisée pour charger de nombreux types de modèles 3D. glad est un loader qui permet d’avoir accès aux fonctions OpenGL modernes, peu importe le système d’exploitation qu’on utilise.

Des classes permettent d’abstraire la fonctionnalité des différents composants: shaders, textures, modèles etc. La programmation objet ne se prête pas toujours bien à la gestion des ressources avec OpenGL qui sont globales. Cela signifie que la gestion mémoire n’est pas forcément évidente, surtout dans un langage comme le C++ qui implique de tout gérer soi-même. C’est parfois aussi un problème pour la performance. Par exemple, un objet ne doit pas se dessiner par lui-même. Une classe « renderer » s’occupe de regrouper les éléments à dessiner par shader, pour ne pas faire des changements inutiles de shader, qui sont très lourds.

Il reste beaucoup de fonctionnalités que j’aimerais rajouter pour que ce projet soit un minimum complet:

  • Ajout d’un shader de PBR (Physically Based Rendering)
  • Chargement automatique des différentes textures des objets (pas juste couleur, mais aussi textures de dureté, métallique etc.)
  • SSAO (Screen Space Ambient Occlusion) pour améliorer les effets de lumières
  • Ombres dynamiques
  • Console dans le moteur pour afficher les logs/erreurs/warnings avec des couleurs et un formatage
  • Pouvoir ajouter et gérer facilement des nouvelles passes de rendu (au lieu d’une seule)
Un modèle de tank visualisé avec le moteur en mode « wireframe »
Un modèle de château visualisé avec le moteur
L’interface du moteur, on aperçoit les différents onglets pour gérer les différents éléments de la scène, et obtenir des informations sur la performance