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.
Principe de fonctionnement
- 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.
- 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.