Si vous savez ce qu'est le lancer de rayons, alors tout ce que vous avez à faire est de le coder en dur. Ce n'est pas trop complexe tant que vous avez des coordonnées pour chaque sommet.
Créez d'abord un objet émanant de la lumière. Placez votre lumière aux coordonnées 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
Il n'est pas garanti que cela fonctionne pour un polygone concave, mais cela devrait fonctionner très bien pour tous les polygones convexes.
Cela fonctionnera si vos objets occlus (murs, personnage, mangeur de personnes violettes volantes) sont peints à l'écran après avoir appliqué l'éclairage. Sinon, la moitié d'un mur apparaîtra beaucoup plus lumineuse que l'autre moitié. Si votre lumière ponctuelle est équidistante de deux paires de sommets du même mur (exactement la moitié de la hauteur de votre mur), appliquez le triangle aux deux sommets les plus proches, plutôt que les deux plus éloignés.
Je dois également mentionner que cette méthode nécessite un point de sommet créé dynamiquement où le bord du rayon de la lumière rencontre la surface de l'objet occlus. Cela crée un minimum de 3 sommets pour tout objet occlus et permettra aux murs qui s'étendent au-delà du rayon de la lumière (ou hors de l'écran) de bloquer également toute lumière.
Plus d'informations sur les polygones concaves et convexes