Aufgabe 4.2 (30 Punkte)
Kopieren Sie die Klasse main.TranslateNGon nach main.TranslateAndRotatePolygon
und den Vertexshader MainT_VS.glsl nach MainTR_VS.glsl.
- Lassen Sie das Programm den Vertexshader MainTR_VS.glsl
und den Fragmentshader MainBrightness_FS.glsl in der Methode
main() laden.
- Erweitern Sie die Klasse um eine Klassenvariable rotation
vom Typ float, in der die aktuelle Rotation des 12-Ecks gespeichert
wird.
- Erweitern Sie die Methoden handleInput() und updateUniforms(),
sodass sie folgende Funktionen zusätzlich erfüllen:
- In handleInput() soll nun zusätzlich geprüft werden, ob die
Tasten oder gedrückt sind und damit die Variable rotation
gegen bzw. mit dem Uhrzeigersinn verändert werden.
- In updateUniforms() soll zusätzlich aus der Variable rotation
eine Rotationsmatrix um die -Achse erzeugt werden und diese als
uniform Variable rotate vom Typ mat4 dem
Shaderprogramm übergeben werden.
- Außerdem soll der konstante Vektor
als uniform Variable inverseLightDir vom Typ vec3
dem Shaderprogramm übergeben werden.
- Verändern Sie den Vertexshader MainTR_VS.glsl, sodass er
eine uniform Variable rotate vom Typ mat4
bereitstellt und mit dessen Hilfe die Rotation der Vertexposition
sowie der -normalen verändert.
- Außerdem soll die out Variable brightness gesetzt
werden. Implementieren Sie dazu die Beleuchtungsformel aus dem Exkurs
über das Lighting der Vorlesung im Vertexshader.
Musterlösung vom 23.05.2012:
Die Quellen finden sich hier:
/home/cg/2012/Uebung/Blatt4/Lsg/CG12Blatt4.zip