Aufgabe 8.2 (40 Punkte)
Implementieren Sie den Vertexshader FragmentMixing_VS.glsl.
Dieser soll folgende Spezifikation erfüllen.
- Eingang: modelMC vom Typ vec3, normalMC
vom Typ vec3, vertexColor vom Typ vec4
und vertexColor2 vom Typ vec4.
- Ausgang: gl_Position vom Typ vec4 (Obacht:
muss nicht als out Variable deklariert werden), normalWC
vom Typ vec3, fragmentColor1 vom Typ vec4
und fragmentColor2 vom Typ vec4.
- Uniforms: viewProj vom Typ mat4, model
vom Typ mat4 und modelIT vom Typ mat4.
- Die Vertexfarben sollen unverändert durchgereicht werden.
- Die Modelkoordinaten, sowie die Normale sollen zunächst in Welt- und
dann in Clippingkoordinaten transformiert und nach gl_Position,
bzw. normalWC gespeichert werden.
Implementieren Sie den Fragmentshader FragmentMixing_FS.glsl.
Dieser soll folgende Spezifikation erfüllen.
- Eingang: Entsprechend dem Ausgang des Vertexshaders FragmentMixing_VS.glsl.
- Ausgang: fragmentColor vom Typ vec4.
- Uniforms: inverseLightDirection vom Typ vec3.
- Die beiden Farben sollen anhand der Normale und inverseLightDirection
gemischt und nach fragmentColor gespeichert werden. Machen
Sie sich dafür mit der GLSL Methode mix(...) vertraut. Weißt
die Normale in Richtung der Lichtquelle, so soll die Tagesfarbe
,
ansonsten die Nachfarbe
ausgegeben werden. Experimentieren
Sie mit verschiedenen Berechnungsarten und wählen Sie letztendlich
eine Formel, die Ihren ästhetischen Ansprüchen hinreichend genügt.
Verändern Sie die Klasse SolSystem so, dass die Erde mittels der Nachttextur
earth_night.jpg und der Tagestextur earth.jpg texturiert
wird. Setzen Sie außerdem die Uniforms inverseLightDirection
auf einen plausiblen Wert und füllen Sie sowohl die Uniform model,
als auch modelIT mit den entsprechenden Werten.
/home/cg/2012/Uebung/Blatt8/Lsg/CG12Blatt8.zip