Se sai cos'è il ray casting, tutto ciò che devi fare è codificarlo. Non è eccessivamente complesso fintanto che hai le coordinate per ciascun vertice.
Innanzitutto, crea un oggetto che emana luce. Posiziona la tua luce sulle coordinate 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
Questo non è garantito per funzionare con un poligono concavo, ma dovrebbe funzionare perfettamente con qualsiasi poligono convesso.
Funzionerà se i tuoi oggetti occludenti (muri, personaggi, persone che volano viola) vengono dipinti sullo schermo dopo aver applicato l'illuminazione. Altrimenti, metà di un muro apparirà significativamente più luminosa dell'altra metà. Se la tua luce di punto è equidistante da due coppie di vertici della stessa parete (esattamente la metà dell'altezza della tua parete), applica il triangolo ai due vertici più vicini, anziché ai due più lontani.
Dovrei anche menzionare che questo metodo richiede un punto di vertice creato dinamicamente in cui il bordo del raggio della luce incontra la superficie dell'oggetto occludente. Questo crea un minimo di 3 vertici per ogni oggetto occludente e consentirà alle pareti che si estendono oltre il raggio della luce (o fuori dallo schermo) di bloccare anche qualsiasi luce.
Ulteriori informazioni sui poligoni concavi e convessi