Computer Graphics, Fall 2017

Michael Kazhdan

Assignment 4: Keyframe Animation

Due on December 14 (Thursday) at 11:59 PM

Thanks to Chuck Rose for ideas, code, and data!



In this assignment you will animate motions for an articulated humanoid figure. You will be given an articulated 3D model and sets of keyframes specifying the orientations of articulated joints at specific time steps. Your job is to interpolate the keyframes smoothly over a time interval so that the articulated figure performs animated actions (e.g., walks, dances, etc.).

An overview of the code you will be using can be found here.

An overview of the .ray file syntax can be found here.

An overview of the .key file syntax can be found here.

Sample actor and key-frame files can be found here.

A (Win32) compiled version of the renderer implementing some of the basic features can be found here.

The OpenGL programming Guide is an invaluable resource in assisting with OpenGL implementation. You can find a link to the guide here or here.

Code Modifications

The code you will be starting with in this assignment is essentially the same code you used for the previous assignment. However, there are a few small changes:

Code Outline

In addition to rendering static models, this assignment will allow you to render animated 3D models. The key to doing this is the class ParametrizedRayGroup (in Ray/rayGroup.[h/cpp]). which represents a transformation node in the scene-graph hierarchy whose value is a function of the time elapsed. At each frame, the transformation associated with a parametrized scene-graph node is changed, and as a result, OpenGL renders a new image. More particularly, animation is achieved through the use of the template class ParameterSamples (in Util/parameterSamples.h and Util/parameterSamples.todo.inl). This class:

The samples for the values of the transformations at different key-frames can be represented in many different ways: While these classes represent transformations in different ways, they all store data that support addition, subtraction, and (right) scalar multiplication.
Note that at every time step, the interpolation/approximation code will be run and the in-between value will be set and written to the member ParametrizedEulerAnglesAndTranslation::value ParametrizedClosestRotationAndTranslation::value ParametrizedRotationLogarithmAndTranslation::value ParametrizedQuaternionAndTranslation::value

How the Program Works

The program takes in as a mandatory arguments the input (.ray) .ray file name. Additionally, you can also pass in the dimensions of the viewing window and the complexity of the tesselation for objects like the sphere, the cylinder, and the cone. It is invoked from the command line with:
% Assignment4 --in in.ray --width w --height h --cplx c --factor matrix/euler/closest/quaternion/log
The --factor specifies how the animations will represent transformations in order to compute the transformations between the key-frame samples. Feel free to add new arguments to deal with the new functionalities you are implementing. Just make sure they are documented.

What You Have to Do

The assignment is worth 15 points. The following is a list of features that you may implement. The number in parentheses corresponds to how many points it is worth.

The assignment will be graded out of 15 points. In addition to implementing these features, there are several other ways to get more points:

It is possible to get more than 15 points. However, after 15 points, each point is divided by 2, and after 17 points, each point is divided by 4. If your raw score is 14, your final score will be 14. If the raw score is 18, you'll get 16.25. For a raw score of 21, you'll get 17.

What to Submit

Submission intstructions are specified here.
Please include the following in your submission: