Wenn Sie wissen, was Ray Casting ist, müssen Sie es nur hart codieren. Es ist nicht übermäßig komplex, solange Sie Koordinaten für jeden Scheitelpunkt haben.
Erstellen Sie zunächst ein lichtausstrahlendes Objekt. Platzieren Sie Ihr Licht bei x, y Koordinaten.
#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
Es ist nicht garantiert, dass dies für ein konkaves Polygon funktioniert, aber es sollte für alle konvexen Polygone gut funktionieren.
Dies funktioniert, wenn Ihre okkludierenden Objekte (Wände, Charakter, fliegender lila Menschenfresser) nach dem Anlegen der Beleuchtung auf den Bildschirm gemalt werden. Andernfalls erscheint die Hälfte einer Wand deutlich heller als die andere Hälfte. Wenn Ihr Punktlicht gleich weit von zwei Scheitelpunktpaaren derselben Wand entfernt ist (genau halb so hoch wie die Höhe Ihrer Wand), wenden Sie das Dreieck auf die beiden nächstgelegenen Scheitelpunkte an und nicht auf die beiden weiter entfernten.
Ich sollte auch erwähnen, dass diese Methode einen dynamisch erzeugten Scheitelpunkt erfordert, an dem die Kante des Lichtradius auf die Oberfläche des okkludierenden Objekts trifft. Dies erzeugt mindestens 3 Eckpunkte für jedes okkludierende Objekt und ermöglicht es Wänden, die sich über den Radius des Lichts (oder außerhalb des Bildschirms) hinaus erstrecken, auch jegliches Licht zu blockieren.
Weitere Informationen zu konkaven und konvexen Polygonen