Computer Laboratory

Further Graphics (Michaelmas 2017)

Click here to check the course website.

The supervision work for this course consists of a mixture of written and practical exercises.

Please hand in your work by 17:00 on the day before the supervision!


Supervision 1

Written Questions

  1. Please have a go at all the exercises on the exercise sheet from the course site

Practical Exercises

  1. To refresh your glsl knowledge a bit, write a shadertoy shader which renders a Voronoi diagram based on a constant array of co-ordinates and colours. Please send me the shader code when finished.

    You should use a number of random co-ordinates and colours (let's say at least 12). E.g.

    const int NUMBER_OF_POINTS = 12;
    const vec2[NUMBER_OF_POINTS] points = vec2[](vec2(0.f,0.1f), vec2(0.2f,0.3f).....
  2. (optional): make the points in Exercise 1. float in random directions with time. "random" is a bit hard to get in glsl, so you might want to look into some clever noise or hash solution.

Supervision 2

Written Questions

  1. Parts (b), (c), (d) and (e) from Year 2013 Paper 4 Question 3
  2. All of Year 2015 Paper 7 Question 1
  3. Please have a go at exercises 1, 2, 3 and 5 from the exercise sheet on the course site

Practical Exercises

  1. Write a Java program which renders a rotating unit blue cube on screen using OpenGL / LWJGL. You can use any previous tick as a starting point, but make sure you use the proper OpenGL path, not Ray Tracing. I recommend storing a list of faces, but remember when you create your OpenGL buffers that you need to break up each rectangle into two triangles.
  2. Modify the shader to render in wireframe mode with a border thickness of approx. 0.05.
  3. Add procedural texturing to map a brick pattern onto the mesh.
  4. (recommended) After some event (keyboard, mouse or timer), subdivide the mesh using Catmull-Clark. This should give you another rectangle/quad based mesh which you can further subdivide.
  5. (optional) Add Phong shading to the sphere
  6. (optional) Add normal mapping
  7. (optional) Do some reading on Parallax Occlusion Mapping (POM), e.g. this article on Gamedev How is POM better than normal mapping? How does it relate to ray tracing? Try to add this technique to your renderer.