Loading repository data…
Loading repository data…
erico-ke / repository
cub3D es un proyecto de 42 School inspirado en el legendario Wolfenstein 3D, considerado el primer FPS de la historia. El objetivo es crear una vista 3D realista dentro de un laberinto desde una perspectiva en primera persona usando la técnica de raycasting. Este proyecto es una introducción a los gráficos 3D en programación, permitiendo explorar
cub3D es un proyecto de 42 School inspirado en el legendario Wolfenstein 3D, considerado el primer FPS de la historia. El objetivo es crear una vista 3D realista dentro de un laberinto desde una perspectiva en primera persona usando la técnica de raycasting.
Este proyecto es una introducción a los gráficos 3D en programación, permitiendo explorar los conceptos matemáticos y algorítmicos detrás de la renderización de entornos 3D en tiempo real.
.cub que definen el mapa y las texturasgcc con flags -Wall -Wextra -Werrorall, clean, fclean, reEl programa debe aceptar como argumento un archivo .cub con el siguiente formato:
NO ./path_to_north_texture.png
SO ./path_to_south_texture.png
WE ./path_to_west_texture.png
EA ./path_to_east_texture.png
F 220,100,0 (Color del suelo en RGB)
C 225,30,0 (Color del techo en RGB)
1111111111111111111111111
1000000000110000000000001
1011000001110000000000001
1001000000000000000000001
111111111011000001110000000000001
100000000011000001110111111111111
11110111111111011100000010001
11110111111111011101010010001
11000000110101011100000010001
10000000000000001100000010001
10000000000000001101010010001
11000001110101011111011111N111
11110111 1110101 101111010001
11111111 1111111 111111111111
Características del mapa:
0: espacio vacío (navegable)1: paredN, S, E, W: posición inicial y orientación del jugador1)W, A, S, D: Movimiento (adelante, izquierda, atrás, derecha)←, →: Rotación de la cámara (izquierda/derecha)ESC: Cerrar la ventana y salir del programaEl programa debe manejar errores como:
.cub)cub3d/
├── includes/
│ └── cub3d.h # Definiciones, estructuras y prototipos
├── libs/
│ ├── libft/ # Librería personal de funciones C
│ └── MLX42/ # Librería gráfica MLX42
├── src/
│ ├── main.c # Punto de entrada del programa
│ ├── parser/*.c # Parseo y validación del archivo .cub
│ ├── mlx/*.c # Inicialización y gestión de MLX
│ ├── raycasting/*.c # Motor de raycasting
│ ├── textures/*.c # Carga y aplicación de texturas
│ └── debug.c # Utilidades de depuración
├── textures/ # Texturas PNG para las paredes
├── test_maps/ # Mapas de prueba con casos edge
├── Makefile
└── README.md
make
./cub3d maps/example.cub
make clean
make fclean
Este proyecto utiliza la técnica de raycasting para renderizar gráficos 3D a partir de un mapa 2D.
Para entender en profundidad la matemática detrás del raycasting (vectores, algoritmo DDA, cálculo de distancias, etc.), consulta:
📖 RAYCASTING_EXPLAINED.md - Explicación detallada en español