El raycasting es una técnica de renderizado que permite simular una vista en primera persona a partir de un mapa bidimensional discretizado en celdas. Aunque el resultado visual aparenta ser tridimensional, todo el cálculo se realiza en un plano 2D, utilizando trigonometría, intersecciones geométricas y proyección en perspectiva. Es una tencica usanda en los primeros videojuejos en 3º perosna, muy Wolfenstein y duke like en los años 80 y 90.
El entorno se representa mediante un grid de celdas donde cada celda indica si el espacio está vacío o contiene una pared. El jugador se mueve en coordenadas continuas dentro de este mapa, mientras que las paredes ocupan posiciones discretas (float = posicion del jugador, int = celdas del mapa).

Mapa de celdas

Mapa 2D con lanzamiento de rayos

Visualizacion de imagen en 3D

Escena con texturas
Desde la posición del jugador se lanza un haz de rayos que cubre el campo de visión (Field of View, FOV), normalmente comprendido entre 60° y 90°. Este haz de rayos representa la porción del mundo visible en cada frame. El haz de rayos de lanza se reparte en la direccion (angulo) en el que mira el jugador y su campode vision.
Rayos hacia la izquierda
/
/
Jugador (pos) ----> Vector dir (centro de la pantalla)
\\
\\
Rayos hacia la derecha
El número de rayos lanzados es igual al número de columnas de la pantalla. Cada rayo se asocia a una columna vertical de píxeles, de modo que cada columna se renderiza de forma independiente. El FOV se distribuye uniformemente entre todas las columnas de la pantalla, asignando a cada rayo una dirección ligeramente distinta. Esto permite una proyección continua y evita discontinuidades visuales.

FOV repartido entre columnas del la ventana
Cada rayo se define mediante las ecuaciones paramétricas de una recta en el plano 2D. Esta determinado por:
$$ (x0,y0) (x_0, y_0) $$
$$ \vec{d} = (d_x, d_y) $$
$$ d_x = \cos(\theta), d_y = \sin(\theta) $$
$$
x(t) = x_0 + t \cdot d_x
$$
$$ y(t) = y_0 + t \cdot d_y $$
El incremento de t desplaza el punto a lo largo de la trayectoria del rayo.

Ecuacines parametricas del rayo
El rayo avanza desde la posición del jugador hasta intersectar una celda que represente una pared. Esta operación constituye una detección de colisión rayo–grid.
Para realizar este proceso de forma eficiente se utiliza habitualmente el algoritmo DDA (Digital Differential Analyzer), que permite avanzar el rayo celda a celda, calculando exactamente cuándo cruza un límite vertical u horizontal del grid.
Cuando el rayo entra en una celda ocupada: