CS-GY 6533 A – Interactive Computer Graphics
1 Mandatory Tasks
For each task below, add at least one image in the readme demonstrating the results. The code that
you used for all tasks should be provided.
1.1 Shadow Mapping
Starting with the interactive application you have implemented in the previous assignment, add shadows
to the scene to increase its realism. You will still need to be able to add, select and move, and delete
3D meshes to the scene (they can be added in randomly at any position in the scene; otherwise, the
center of the scene).
The scene should always contain one light source (you can add more light sources if you want, but
that will require multiple depth maps). The light source should be placed on top of the scene and move
around the scene’s objects in a circular path (imagine you are in the center of a room, and the light
source moves around you at the top of your head).
New objects can be added to the scene in three ways:
• The key ’1’ will add a unit cube in the origin
• The key ’2’ will import a new copy of the mesh bumpy cube.off, scale it to fit into a unit cube
and center it on the origin
• The key ’3’ will import a new copy the mesh ’bunny.off’, scale it to fit into a unit cube and center
it on the origin
Note that you can have multiple copies of the same object in the scene, and each copy can have its
position, scale, and rotation. All objects (besides the reflective ones) must be shaded using the Phong
Shading (per-fragment shading) and Phong’s lighting model.
The shadow’s color must interchangeably change colors from back to red and vice-versa when the user
hits the key ’s’ (see Figure 1 and Figure 2). In order to easily visualize the shadows, you must render a
plane below the objects in the scene (see Figure 1).
Don’t forget to consult the class’ Textbook and the optional and recommended text. The OpenGL
Programming Guide has a full section on shadow mapping. It is explained in detail how to set up the
depth buffer for using a shadow mapping algorithm and the matrices transformations needed.
1.2 Environment Mapping
In this task, you must implement the environment mapping technique discussed in class. Using the cube
map textures provided in the data folder into the assignment directory in GitHub, you must create the
cube skybox and correctly load the textures in OpenGL (remember the axis directions).
These tasks are optional.
This talks is optional and worth 1% of the final grade.
The calculation of the reflection vector can be easily changed to the calculation of the refraction vector.
Add to your system the refractive material property for the objects. Once it is implemented, you will be
able to render transparent objects.
1.5 Dynamically Generated Cube Map Textures
This talks is optional and worth 3% of the final grade.
As discussed in class, the cube map textures can be generated on the fly. This technique allows us to
render objects with time-dependent reflections, i.e., all objects in the scene will be displayed in the cube
map textures. As a result, the reflection color values on a reflective object’s surface will change with
time. This technique adds a performance hit in the final total rendering time. Why is that?