Si sabes lo que es la emisión de rayos, entonces todo lo que necesitas hacer es codificarlo. No es demasiado complejo siempre que tenga coordenadas para cada vértice.
Primero, crea un objeto que emana luz. Coloque su luz en las coordenadas x, y.
#include <math.h>
int i = 0;
if ( sqrt( abs( light.x - vertex.x )^2 + abs( light.y - vertex.y )^2 ) <= light.radius)
{
lightOccludingVertices[i] = vertex;
i++;
}
//If two or more vertices are both a member of an individual wall,
//illuminate the triangular area between the light, the furthest
//vertex on the x-axis, and the furthest vertex on the y-axis
No se garantiza que funcione para un polígono cóncavo, pero debería funcionar bien para cualquier polígono convexo.
Esto funcionará si sus objetos ocultos (paredes, personajes, comedores de personas que vuelan de color púrpura) se pintan en la pantalla después de aplicar la iluminación. De lo contrario, la mitad de una pared aparecerá significativamente más brillante que la otra mitad. Si su punto de luz es equidistante de dos pares de vértices de la misma pared (exactamente la mitad de la altura de su pared), aplique el triángulo a los dos vértices más cercanos, en lugar de los dos más alejados.
También debo mencionar que este método requiere un punto de vértice creado dinámicamente donde el borde del radio de la luz se encuentra con la superficie del objeto oclusivo. Esto crea un mínimo de 3 vértices para cualquier objeto oclusivo y permitirá que las paredes que se extiendan más allá del radio de la luz (o fuera de la pantalla) también bloqueen cualquier luz.
Más información sobre polígonos cóncavos y convexos.