Aufgabe 9.3 (30 Punkte)
Erzeugen Sie den Vertexshader FragmentLighting_VS.glsl mit
folgenden Spezifikationen.
- Eingang: positionMC vom Typ vec3, normalMC
vom Typ vec3, texCoords vom Typ vec2.
- Ausgang: positionWC vom Typ vec3, normalWC
vom Typ vec3, fragmentTexCoords vom Typ vec2.
- Uniforms: viewProj vom Typ mat4, model
vom Typ mat4, modelIT vom Typ mat4.
- Die Position (positionWC) und die Normale (normalWC) in Weltkoordinaten
sollen berechnet und die Texturkoordinaten durchgereicht werden.
Laden Sie den Fragmentshader FragmentLighting_FS.glsl von
der CG-Seite und machen Sie sich mit seinem Aufbau vertraut. Implementieren
Sie die folgenden Methoden.
- In plIntensity(vec3 p, vec3 p_p, vec3 I_p_max) soll die
Intensität einer Punktlichtquelle auf einen übergebenen Punkt berechnet
werden.
- In calcLighting(vec3 pos, vec3 normal, vec3 c_d, vec3 c_s)
soll ein Punkt komplett beleuchtet werden. Dabei sollen alle Punktlichtquellen,
die in dem Array plPosition und plMaxIntensity stehen,
mit in die Beleuchtung eingehen. Verwenden Sie dazu die Uniform Variablen
des Shaders und die im Skript vorgestellten Formeln.
- In main(void) soll zunächst die diffuse, sowie die spekulare
Materialfarbe bestimmt und anschließend mittels calcLighting(...)
das aktuelle Fragment beleuchtet werden.
/home/cg/2012/Uebung/Blatt9/Lsg/CG12Blatt9.zip