docs: add comprehensive README for 3D raycasting engine project
This commit is contained in:
parent
8c7597c0b8
commit
109748c261
131
README.md
Normal file
131
README.md
Normal file
@ -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 <repository-url>
|
||||||
|
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
|
||||||
Loading…
Reference in New Issue
Block a user