prev up next


Aufgabe 4.2 (30 Punkte)

Kopieren Sie die Klasse main.TranslateNGon nach main.TranslateAndRotatePolygon und den Vertexshader MainT_VS.glsl nach MainTR_VS.glsl.

  1. Lassen Sie das Programm den Vertexshader MainTR_VS.glsl und den Fragmentshader MainBrightness_FS.glsl in der Methode main() laden.
  2. Erweitern Sie die Klasse um eine Klassenvariable rotation vom Typ float, in der die aktuelle Rotation des 12-Ecks gespeichert wird.
  3. Erweitern Sie die Methoden handleInput() und updateUniforms(), sodass sie folgende Funktionen zusätzlich erfüllen:

    1. In handleInput() soll nun zusätzlich geprüft werden, ob die Tasten $Q$ oder $E$ gedrückt sind und damit die Variable rotation gegen bzw. mit dem Uhrzeigersinn verändert werden.
    2. In updateUniforms() soll zusätzlich aus der Variable rotation eine Rotationsmatrix um die $z$-Achse erzeugt werden und diese als uniform Variable rotate vom Typ mat4 dem Shaderprogramm übergeben werden.
    3. Außerdem soll der konstante Vektor $\mathrm{\left(\begin{array}{c}
0\\
1\\
0
\end{array}\right)}$ als uniform Variable inverseLightDir vom Typ vec3 dem Shaderprogramm übergeben werden.
    4. 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.
    5. 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 


prev up next