Program 4 - World

GitHub Classroom Assignment Page

This assignment is due on Friday 3/9.


Your goal for this program is to create a simple world scene and allow the user to explore it. Your world must contain at least:

The user is allowed to move through the world (by moving the camera). The user is allowed to move forward, backward, and side to side (relative to their current gaze). The user can also rotate their view to look all round and up and down.

In addition, this world must include a “security camera” and “monitor/screen” that is created using a frame buffer object.

You are allowed the freedom of creativity in terms of creating and arranging models. You are encouraged to make a visually interesting world.

This is an individual assignment. There are a number of tutorials that closely follow the requirements for this program. Make sure you implement and understand your own solution.

The specifics:


Your program will need to procedurally generate a scene. This scene will include at least:


Your program should allow the user to move around and explore the world. This will be controlled by moving the camera around in the scene. The camera can be translated using the following keyboard events:

Note that by “relative to the current gaze” I mean using the camera basis vectors as discussed in class.

In addition the view can be rotated to allow the user to look around the world. Rotation of the view will be controlled using the mouse.

A movement to the right with the mouse should allow the user to rotate their view to look to the left – likewise with a movement to the left. The user should be able to spin their view 360 degrees around.

A mouse movement down should allow the user to look up while a movement up should allow the user to look down. Constrain the vertical movement of the view such that the user can only move a total of 160 degrees (80 degrees up and 80 down).

Once the view has been rotated, all camera translations should be relative to this new view! This should allow the user to completely explore your world. You are allowed freedom to choose the exact speed of the camera motion for rotation and translation but it must be reasonable! That means a user must be able to feel like they can explore the world (i.e. not wait for lag or become confused by rapid motion).

Surveillance Camera

Include an updating “surveillance camera + tv monitor” in your scene (see below figures for an example).

Do this by:

Also place an object in your world that represents the “surveillance camera” - it doesn’t have to actually look like a camera, but just can be used to know where the scene is being rendered from.

Other Notes


Point break down:

Here are sample screen shots (including optional fake shadows – this is lighting via directional lighting light the sun – the shadows position matches the light direction):

Program 4 Figure 1

Views of two similar worlds that include the “surveillance camera”, which shows a view of the world from the TV’s perspective:

Program 4 Figure 2
Program 4 Figure 3