← Retour

Cub3D - Moteur de Jeux 3D en Raycasting

Développement d'un moteur de rendu 3D en C utilisant un algorithme de raycasting. Affichage d'un monde 3D à partir d'une carte 2D, avec gestion des textures, des sprites, des collisions, et d'une minimap. Implémentation réalisée avec la MinilibX, sans aucune autre bibliothèque graphique.

  • C

Contexte & objectif

Création d’un moteur graphique affichant un monde en 3D en vue subjective, rendu uniquement par le CPU. Inspiré de Wolfenstein 3D (1992), ce projet m’a permis d’implémenter le raycasting pour transformer une carte 2D en environnement 3D immersif avec la MinilibX.

3D game fpv

Principe de fonctionnement

  1. Parsing de la map
    • Lecture de la carte, des chemins d’images des textures et des couleurs sol/plafond etc.
    • Validation de carte (fermeture/entourage) avec un algorithme flood fill pour s’assurer qu’aucune zone accessible n’ouvre sur l’extérieur.
  2. Boucle de rendu (par frame)
    • Pour chaque colonne de l’écran, émission d’un rayon selon le champ de vision du joueur.
    • Progression du rayon case par case dans la grille jusqu’à détecter la première intersection avec un mur/sprite.
    • Calcul trigonométrique des distances avec correction de l’angle de vue, projection de la hauteur de mur et échantillonnage dans la texture correspondante.
    • Écriture pixel-par-pixel dans le buffer, puis affichage via la MinilibX.

Fonctionnalités implémentées

  • Moteur de raycasting (CPU-only).
  • Textures sur les 4 orientations de murs.
  • Déplacements (ZQSD) et rotation de la caméra.
  • Collisions contre les murs.
  • Minimap 2D (position du joueur et des sprites + carte).
  • Parsing/validation du fichier map.

Compétences développées

  • Implémentation d’algorithmes graphiques.
  • Programmation avec la MinilibX.
  • Parsing de formats simples et validation de données (flood fill).
  • Optimisation pour maintenir un framerate fluide.
  • Structuration et gestion d’un projet modulaire.