cub3D
Un moteur 3D par raycasting écrit en C, dans l’esprit de Wolfenstein 3D.
Un moteur de raycasting en C, dans l’esprit de Wolfenstein 3D (1992) — le jeu qui a inventé le FPS.
Ce que fait le programme
Il lit un fichier de scène et affiche un labyrinthe en vue subjective, en temps réel, dans une fenêtre MiniLibX. Les murs sont texturés selon leur orientation cardinale, le sol et le plafond prennent leurs couleurs dans le fichier. Les flèches tournent la caméra, W A S D déplacent, M affiche ou masque la minicarte, ESC quitte.
Le fichier de scène
Un fichier .cub contient quatre chemins de textures (NO, SO, WE, EA), une couleur de sol et une couleur de plafond en triplets RVB, et la carte elle-même : 0 pour un espace vide, 1 pour un mur, et l’un de N S E W pour la position et l’orientation initiale du joueur. L’analyseur travaille en deux temps — les six éléments de configuration d’abord, puis la carte, collectée dans une liste chaînée puisque sa taille est inconnue à l’avance — et valide tout avant même d’ouvrir une fenêtre : le labyrinthe doit être fermé et ne contenir qu’un seul point de départ.
Le raycasting
Pour chaque colonne de la fenêtre, un rayon part de la caméra et avance dans la grille jusqu’à toucher un mur. La distance à ce mur, corrigée de l’effet fisheye, donne la hauteur de la colonne à dessiner ; la face touchée donne la texture, et le point d’impact exact donne la colonne de texture.
Bonus
Détection des collisions avec les murs, et minicarte en surimpression indiquant la position du joueur.