Aufgabenstellung

Modifizieren sie den Toon-Shader aus Aufgabe 3.1 so, dass die Szene von unabhägigen und verschiedenfarbigen Lichtquellen an unterschiedlichen Positionen beleuchtet wird. Intensität und Position der Lichtquellen soll von der Anwendung aus über uniform Variablen steuerbar sein. Wählen sie Geometrie und Farben so, dass der Effekt gut zur Geltung kommt.

Einstellungen
Licht 1
Licht 2
Licht 3
Controls

Erläuterungen zur Übung

Der vorhandene Shader-Code wurde nahezu vollständig übernommen und lediglich erweitert.

So berechnet der Vertex-Shader statt für eine Lichtquelle die Richtung dieser nun für drei. Dabei werden die Positionsangaben wie gehabt über Uniform-Variablen an den Shader übergeben.

Im Fragment-Shader beachtet die toon()-Funktion zusätzlich die Lichtintensität für die diskretisierten, diffusen Farbabstufungen (u.A. Zeile 214). Die Outline bleibt weiterhin schwarz und auch das Glanzlicht wird nicht mit der Lichtfarbe verrechnet. Der wichtigste Unterschied im Fragment-Shader ist, das für jedes Fragment die toon()-Funktion in Abhängigkeit der Licht-Anzahl ausgeführt wird (Zeile 232-245). Dabei werden die jeweiligen Licht-Parameter übergeben und die einzelnen Ergebnisse aufsummiert, so das ein mischen der Lichtfarbe erreicht wird, sofern das Fragment von mehreren Lichtquellen getroffen wird.

Sourcecode Toon-Shader

Verwendete Ressourcen und Quellcode