From 109748c261ff4aefdc6d8c0722e2202577f6997e Mon Sep 17 00:00:00 2001 From: kinou-p Date: Thu, 2 Oct 2025 10:15:08 +0200 Subject: [PATCH] docs: add comprehensive README for 3D raycasting engine project --- README.md | 131 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..6790001 --- /dev/null +++ b/README.md @@ -0,0 +1,131 @@ +# 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 +```bash +git clone +cd Cub3D +``` + +### 2. Compiler le projet +```bash +make +``` + +### 3. Nettoyer les fichiers objets +```bash +make clean # Supprime les .o +make fclean # Supprime tout + l'exécutable +make re # Recompile tout +``` + +## Utilisation + +### Lancement du jeu +```bash +./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 \ No newline at end of file