Thema: Licht-Masken

Einzelnen Beitrag anzeigen

Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Licht-Masken

  Alt 3. Sep 2010, 22:38
Licht musst du immer additiv zeichnen, spricht die Pixelwerte der Lichter müssen einfach addiert werden:
Code:
Rot_Neu = Rot_Licht + Rot_Alt;
Blau_Neu = Blau_Licht + Blau_Alt;
Grün_Neu = Grün_Licht + Grün_Alt;
Dies ist ja auch logisch - stell dir mal zwei Taschenlampen vor, die sich gegenseitig überschneiden - in der Mitte wird es entsprechen heller, da sich die Lichtintensität aufaddiert hat.

Problem bei der "Simulation" ist jedoch, dass deine Szene ohne Licht komplett schwarz ist - und wenn du auf komplett schwarz die Lichtwerte aufaddierst, wird sie dadurch nicht sichtbar. Deshalb musst du die Pixelwerte der Lichter mit denen der Szene multiplikativ verrechnen. Sprich:
Code:
Rot_Ziel = Rot_Lichter * Rot_Szene;
Blau_Ziel = Blau_Lichter * Blau_Szene;
Grün_Ziel = Grün_Lichter * Grün_Szene;
Das ist auch logisch - stell dir vor, kein Licht ist an, also RGB(0, 0, 0), so ist auch kein Pixel der Szene sichtbar. Ist rotes Licht an, so sind auch nur die roten Pixel sichtbar.

Also ist die Vorgehensweise:
  1. Zeichne alle Lichter additiv getrennt in einen zunächst schwarzen Off-Screen buffer
  2. Zeichne deine Szene ganz normal und zeichne den Lichter-Off-Screen-Buffer multiplikativ auf deine Szene oben drauf und schon bist du fertig

PS: Die Lichter sollten keine transparenz haben sein, sondern einfach nach schwarz überblenden, durch das additive Zeichnen bedeutet schwarz ja einfach "keine Änderung"
PPS: Hier gab es letztens einen Thread wo jemand das Ganze mit Andorra 2D umgesetzt hat, also schau mal danach
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein

Geändert von igel457 ( 3. Sep 2010 um 22:41 Uhr)
  Mit Zitat antworten Zitat