Topics:

- Parallel and Perspective Viewing
- Flat shading
- Triangle mesh models
- Camera motion

Write a program that loads a triangle mesh model (with at least 100 triangles) from an smf file. smf files can be found here

The file name of the model should be passed as an argument to your program

Calculate a surface normal for each triangle.

Normalize the normal and take its absolute value, and set the triangle's color equal to this vector. This will visualize the normal as a color.

Implement a rotating camera view of the model using the LookAt function.

Your camera should rotate on a cylinder around the model.

Allow the user to interactively change the height, the orbit radius and cylinder angle of the camera via keyboard input.

Changing the angle should make the camera rotate around and look at the smf model (i.e. your LookAt point stays constant (the model centroid perhaps)).

Recall that the Cartesian coordinates of a point (X, Y , Z) defined in cylindrical coordinates (θ, R(adius), H(eight)) is

This is for a cylinder aligned along the Z axis. You may have to rearrange the terms to properly view some of the models.

X = R * cos(θ)

Y = R * sin(θ)

Z = HAllow the user to select either parallel or perspective projection.

Your flat-shaded models should look something like the ones below.

- Reading in and storing an SMF model (1 point)
- Implementing flat shading (2 points)
- Interface for interactively changing view of model (1 point)
- Properly implementing camera movement (2 points)
- Implementing parallel projection (2 points)
- Implementing perspective projection (2 points)

Last modified February 26, 2017.