Practical Exercise 4.

Hand in ONLY the {@link de.rwth_aachen.graphics.Main Main.java} source file and the shader source file texture.frag which is located in "res/shaders/" until 14.12.2009 13:30h to cg1@informatik.rwth-aachen.de.
Please note: We will only take into account the code in the designated areas!


Description:

In this exercise, you will learn to use textures in shaders and as render target. Since the Java documentation does not include the glSlang files we have put the tasks here.

GLSL task:

Task 1.a: res/shaders/texture.frag
The basis of this fragment shader is the phong model. Extend this by using textures for the diffuse color and the specularity. Additionally, you have to use a cube map for an environment reflection. This should be dependent on the specularity value.

Hint: OpenGL does not distinguish between a model and a view matrix and only provides the modelview matrix. In our implementation, we use eye coordinates in the fragment shader. In order to get back to the model space you can use the {@link de.rwth_aachen.graphics.Camera#getInverseViewMatrix() inverse view matrix} that is provided by our camera class.

Java tasks:

{@link de.rwth_aachen.graphics.Main#init() Task 1.b Upload rusty metal textures.}
{@link de.rwth_aachen.graphics.Main#loop() Task 1.c Setting rusty metal uniforms and textures.}
{@link de.rwth_aachen.graphics.Main#init() Task 2.b Initialize the render target.}
{@link de.rwth_aachen.graphics.Main#loop() Task 2.c/d Render to the screen.}

General notes: As in the previous exercises we already provide some interactivity which provides changing the current shader by pressing "s" and changing the current geometry by pressing "g". The "space" key will switch the camera mode. You can also switch the lights on and off by using the keys 1, 2 and 3.