Se você sabe o que é a conversão de raios, tudo o que você precisa fazer é realmente codificá-lo. Não é muito complexo, desde que você tenha coordenadas para cada vértice.
Primeiro, crie um objeto emanador de luz. Coloque sua luz nas 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
Não é garantido que funcione para um polígono côncavo, mas deve funcionar bem para todos os polígonos convexos.
Isso funcionará se seus objetos oclusivos (paredes, personagem, comedor de pessoas roxas voadoras) forem pintados na tela após a aplicação de iluminação. Caso contrário, metade de uma parede parecerá significativamente mais brilhante que a outra metade. Se sua luz pontual for equidistante de dois pares de vértices da mesma parede (exatamente a metade da altura da parede), aplique o triângulo nos dois vértices mais próximos, em vez dos dois mais distantes.
Também devo mencionar que esse método requer um ponto de vértice criado dinamicamente, em que a borda do raio da luz encontra a superfície do objeto oclusivo. Isso cria no mínimo 3 vértices para qualquer objeto oclusivo e permitirá que paredes que ultrapassam o raio da luz (ou fora da tela) também bloqueiem qualquer luz.
Mais informações sobre polígonos côncavos e convexos