elouann.dev
EN — English version

ProjetsSystèmes, réseau & algorithmes

Cub3D

Un raycaster en C

Période
juil. 2025
Cadre
cursus 42
Équipe
en groupe
Note
125/100
  • C
  • Bas-niveau
  • Algorithmes
  • Graphique
  • Programmation impérative
  • Mathématiques

Voir le code

Un raycaster en C, dans l’esprit de Wolfenstein 3D : une carte en deux dimensions, affichée comme si on y marchait en vue subjective. À deux, avec la MiniLibX.

carte 2Djoueurpoints : chaque bord de case franchi (DDA)écranhauteur d’une colonne = 1 / distancedeux teintes : face verticale ou horizontale
SchémaUn rayon par colonne d’écran. L’algorithme DDA avance de bord de case en bord de case jusqu’au mur ; plus le mur est loin, plus sa colonne est petite.

Le principe

Il n’y a pas de vraie 3D : pour chaque colonne de pixels, on lance un rayon depuis le joueur sur la carte 2D. L’algorithme DDA (Digital Differential Analyzer) fait avancer ce rayon d’une ligne de la grille à la suivante, ce qui permet de trouver le premier mur sans tester chaque point.

La distance au mur, corrigée pour éviter l’effet « fish-eye », donne la hauteur de la tranche de mur à dessiner. La face touchée (nord, sud, est, ouest) choisit la texture.

Ce que nous avons ajouté

Le parsing du fichier .cub rejette proprement toute carte mal formée ou ouverte. En bonus : une mini-carte en temps réel, un sprite animé, la caméra à la souris (sans que le pointeur s’échappe de la fenêtre), des portes qu’on ouvre et ferme, et des collisions qui empêchent de traverser les murs.

Ce que j’en retiens

  • Un peu de trigonométrie bien placée remplace beaucoup de calcul.
  • Rendre une image à chaque frame oblige à penser au coût de chaque opération.