Métodos

42 (X): Cub3D, raycasting y paredes que parecen 3D

Un motor 3D sin motor: raycasting estilo Wolfenstein, texturas y el proyecto que más ha impactado al verlo funcionar.

42 (X): Cub3D, raycasting y paredes que parecen 3D

Hay proyectos que te cambian la manera de ver los videojuegos. Cub3D es uno de ellos: un motor 3D sin motor, hecho desde cero en C, donde las paredes que ves no están modeladas en ningún sitio — son el resultado de disparar rayos de luz por una rejilla de laberinto y ver dónde chocan.

Cómo funciona el truco

El raycasting es una idea simple con consecuencias espectaculares. Desde el jugador se lanza un rayo por cada columna de píxeles de la pantalla; el rayo avanza por el mapa 2D hasta que toca una pared; la distancia recorrida determina la altura que pinta esa columna. Cuanto más lejos la pared, más corta. El cerebro de quien mira hace el resto y cree que está en un mundo tridimensional. Es el truco de Wolfenstein 3D (1992), y reconstruirlo significa entender trigonometría, distancias y perspectivas de una manera que ningún libro te enseña.

Lo que tuve que construir

Antes de dibujar nada hay que leer el mapa: parsear ficheros .cub con texturas, colores y la distribución del laberinto, y validarlo todo. Hice trece mapas de error, uno por cada manera de colarse que se me ocurría: paredes abiertas, caracteres extraños, texturas que faltan, jugadores fuera del mapa. Si el mapa es sospechoso, el programa se niega a arrancar con un mensaje claro.

Después: minilibX para la ventana y los píxeles, texturas direccionales (norte, sur, este y oeste tienen su imagen), movimientos con colisiones para no atravesar paredes, y rotación de cámara suave.

La parte que no sale en los tutoriales

minilibX es una librería vieja con versiones diferentes para macOS y Linux, y hacer que el proyecto compile y se comporte igual en las dos plataformas es un proyecto en sí mismo. Hubo días en que el debugging gráfico era más de compilación que de geometría.

Y el rendimiento: cuando cada píxel se calcula a mano, aprendes a mirar el bucle interno con respeto. Un cálculo de más en la distancia del rayo y el rendimiento cae en picado.

Lo que me quedo

Fue el proyecto donde más gente se paró a mirar la pantalla mientras funcionaba. Ver el laberinto aparecer columna a columna, con las texturas puestas y la cámara girándose, tiene una magia que ninguna otra herramienta de 42 había dado. Y, como todos los proyectos grandes, sales con la sensación de que la próxima vez que alguien te diga “es solo un juego”, tendrás ganas de explicarle exactamente cuánto hay dentro.