Cub3D/README.md

3.6 KiB

Cub3D

Description

Cub3D est un projet de l'École 42 qui consiste à créer un moteur de rendu 3D inspiré du jeu Wolfenstein 3D. Le projet utilise la technique du raycasting pour créer un environnement 3D navigable en temps réel.

Objectifs pédagogiques

  • Comprendre les bases du rendu graphique 3D
  • Maîtriser la technique du raycasting
  • Manipuler des textures et des sprites
  • Gérer les événements clavier et souris
  • Optimiser les performances en temps réel

Fonctionnalités

  • Rendu 3D en temps réel avec raycasting
  • Déplacement fluide du joueur (WASD)
  • Rotation de la caméra avec les flèches directionnelles
  • Textures murales différenciées selon l'orientation
  • Système de collision avec les murs
  • Parsing de map depuis un fichier .cub
  • Gestion des couleurs pour le sol et le plafond

Technologies utilisées

  • Langage : C
  • Bibliothèque graphique : MiniLibX
  • Système de build : Makefile
  • Mathématiques : Trigonométrie, géométrie vectorielle

Prérequis

  • GCC compiler
  • MiniLibX library
  • Make
  • Système X11 (Linux) ou équivalent

Installation et compilation

1. Cloner le projet

git clone <repository-url>
cd Cub3D

2. Compiler le projet

make

3. Nettoyer les fichiers objets

make clean    # Supprime les .o
make fclean   # Supprime tout + l'exécutable
make re       # Recompile tout

Utilisation

Lancement du jeu

./cub3D maps/map.cub

Contrôles

  • W, A, S, D : Déplacement
  • Flèches gauche/droite : Rotation de la caméra
  • ESC : Quitter le jeu

Format de map (.cub)

NO ./textures/north_texture.xpm
SO ./textures/south_texture.xpm
WE ./textures/west_texture.xpm
EA ./textures/east_texture.xpm

F 220,100,0
C 225,30,0

1111111111111111111111111
1000000000110000000000001
1011000001110000000000001
1001000000000000000000001
111111111011000001110000000000001
100000000011000001110111111111111
11110111111111011100000010001
11110111111111011101010010001
11000000110101011100000010001
10000000000000001100000010001
10000000000000001101010010001
11000001110101011111011110N0111
11110111 1110101 101111010001
11111111 1111111 111111111111

Structure du projet

Cub3D/
├── Makefile              # Compilation
├── includes/             # Headers (.h)
├── srcs/                # Code source
│   ├── main.c
│   ├── cast_ray/        # Algorithme de raycasting
│   ├── key_event/       # Gestion des événements
│   ├── parsing/         # Lecture et validation de la map
│   └── utils/           # Fonctions utilitaires
├── libft/               # Bibliothèque personnelle
├── mlx/                 # MiniLibX
├── map/                 # Fichiers de cartes
└── sprite/              # Textures et sprites

Algorithme de raycasting

Le raycasting fonctionne en :

  1. Lance un rayon pour chaque colonne de l'écran
  2. Calcule la distance jusqu'au premier mur touché
  3. Détermine la hauteur du mur à afficher
  4. Applique la texture appropriée selon l'orientation

Normes et contraintes 42

  • Code conforme à la Norme 42
  • Gestion stricte de la mémoire (pas de leaks)
  • Gestion d'erreurs robuste
  • Interdiction des variables globales
  • Utilisation limitée des fonctions autorisées

Compétences développées

  • Programmation graphique en C
  • Mathématiques appliquées (trigonométrie)
  • Optimisation d'algorithmes
  • Gestion mémoire rigoureuse
  • Architecture logicielle

Auteur

Alexandre Pommier (apommier) - École 42