Mètodes

42 (X): Cub3D, raycasting i parets que semblen 3D

Un motor 3D sense motor: raycasting estilo Wolfenstein, textures i el projecte que més ha impactat en veure'l funcionar.

42 (X): Cub3D, raycasting i parets que semblen 3D

Hi ha projectes que et canvien la manera de veure els videojocs. Cub3D és un d’ells: un motor 3D sense motor, fet des de zero en C, on les parets que veus no estan modelades enlloc — són el resultat de disparar raigs de llum per una graella de laberint i veure on xoquen.

Com funciona el truc

El raycasting és una idea simple amb conseqüències espectaculars. Des del jugador es llança un raig per cada columna de píxels de la pantalla; el raig avança pel mapa 2D fins que toca una paret; la distància recorreguda determina l’alçada que pinta aquella columna. Com més lluny la paret, més curta. El cervell de qui mira fa la resta i creu que està en un món tridimensional. És el truc de Wolfenstein 3D (1992), i reconstruir-lo significa entendre trigonometria, distàncies i perspectives d’una manera que cap llibre t’ensenya.

El que vaig haver de construir

Abans de dibuixar res cal llegir el mapa: parsejar fitxers .cub amb textures, colors i la distribució del laberint, i validar-ho tot. Vaig fer tretze mapes d’error, un per cada manera d’enganxar-se que se m’ocorria: parets obertes, caràcters estranys, textures que falten, jugadors fora del mapa. Si el mapa és sospitós, el programa es nega a arrencar amb un missatge clar.

Després: minilibX per a la finestra i els píxels, textures direccionals (nord, sud, est i oest tenen la seva imatge), moviments amb col·lisions per no travessar parets, i rotació de càmera suau.

La part que no surt als tutorials

minilibX és una llibreria vella amb versions diferents per macOS i Linux, i fer que el projecte compili i es comporti igual a les dues plataformes és un projecte en si mateix. Hi va haver dies que el debugging gràfic era més de compilació que de geometria.

I el rendiment: quan cada píxel es calcula a mà, aprens a mirar el bucle intern amb respecte. Un càlcul de més a la distància del raig i el rendiment cau en picat.

El que em quedo

Va ser el projecte on més gent es va aturar a mirar la pantalla mentre funcionava. Veure el laberint aparèixer columna a columna, amb les textures posades i la càmera girant-se, té una màgia que cap altra eina de 42 havia donat. I, com a tots els projectes grans, en surts amb la sensació que la propera vegada que algú et digui “és només un joc”, tindràs ganes d’explicar-li exactament quant hi ha dins.