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
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.
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.