Dies kann mit Maskierung erfolgen. Es gibt mehrere Möglichkeiten, dies zu tun.
Eine Möglichkeit wäre, eine Schattenversion von Vordergrundelementen zu rendern. Zeichne den Hintergrund. Zeichnen Sie dann die Vordergrundelemente leicht versetzt, je nachdem, wie sich die Beleuchtung bewegen soll, sodass Sie nur schwarze Farben ausgeben. Zeichnen Sie dann den Vordergrund normal.
Eine andere Möglichkeit wäre, den Vordergrund in einen Puffer zu rendern, ein bisschen mehr als Sie tatsächlich sehen würden. Dann machen Sie einen "zu schwarzen" Pass und vielleicht einen Unschärfepass. Rendern Sie nun die Ausgabe dieses Satzes von Durchläufen und dann den sichtbaren Abschnitt des Vordergrundpuffers.
Um mehrere Lichter in verschiedenen Winkeln zu unterstützen, können Sie den vorherigen Schritt einfach mehrmals ausführen oder alle in einem einzigen Puffer sammeln. Die Mathematik hängt davon ab, was Sie erreichen möchten. Eine erste Vermutung in diesem ersten Video ist jedoch, dass sie nur die Position des Lichts gegen die Position der Kamera (Mitte des sichtbaren Bereichs) und einnehmen Verwenden Sie dann diesen Vektor (skaliert), um zu bestimmen, wie die Schatten versetzt werden sollen. Etwas wie:
draw background
for each light intersecting viewing bounds:
offset = light.position - camera.position
offset *= SCALE FACTOR (0.25 maybe)
draw shadow foreground at offset
draw foreground
Lichter, die "näher" an der Szene sind, haben einen kleineren Skalierungsfaktor. Wenn Sie mehrere Tiefen wollen, müssen Sie einige mathematische Dinge herausfinden, einfache geometrische Dinge.