CSCE 441 – Computer Graphics

Assignment 6 [due by 4/24/2013]

 

This assignment consists of two parts. [250 points]

 

Part I:  [125 points] Obtain Key Poses by Inverse Kinematics

 

Students will implement a direct-manipulation interface that drags an object model to a desired pose which both satisfies fixed constraints and moving constraints.  

(1). Fixed Constraints: You choose a point on the bone of the object. And the point on the bone will not move.

(2) Moving Constraints: You drag a point on the bone of the object into a new position. And the pose will change during you dragging (not after your drag).

 

Let’s see one example (one fixed and one moving).

(1) First, we choose a fixed constraint (red point) by right click on a bone.

(2) Second, we drag another bone into a desired pose (as the green arrow).

(3) Then, we can a result. The pose that we obtained both satisfies the fixed constraint (red rot position) and the moving constraint (the green dot)


Let’s see the second example (multiple fixed and one moving)

(1) First, we choose multiple fixed constraints (red point) by right click on a bone.

 

(2) Second, we drag another bone into a desired pose (as the green arrow).

(3) Then, we can a result. The pose that we obtained both satisfies the fixed constraints (red rots) and the moving constraint (the green dot)

 

And you can also only use the moving constraints without any fixed constraints, and then the object is actually translating with a little rotation.

 

For more technique details, please see my slides here.

http://students.cse.tamu.edu/jjzhang10/Assignment6.pptx

 


The demo program, please download here. (Right Click to add fixed constraint, Left Button to drag)

http://students.cse.tamu.edu/jjzhang10/Assignment6_demo.zip

 

 

What I have provided: (Skeleton Code)

http://students.cse.tamu.edu/jjzhang10/skeleton.zip

(1) Optimization Library Setup: It can help implement IK.

(2) Pick a point and show which arm it belongs to, and calculate the position of the point in the corresponding arm’s local coordinate.

(3) A Lamp class definition

 

You are not required to use the skeleton code that I provide. You can develop your own one. Please submit a ReadMe file about how to manipulate the object.

 

Grading (125 points):

1. [10 points] Visualize the fixed constraints and the moving constraints during dragging.

(You need use glutMotionFunc to deal with the dragging)

 

2. [45 points] Implement Forward Kinematics. (Given a configuration, you can calculate the global position of each constraint)

 

3. [70 points] Implement Inverse Kinematics. (Drag the object, and the pose changes according the dragging. You need to implement this by two modes. One is only with moving constraints, and the other is both moving constraints and fixed constraints.) 

 

4. [Bonus 10 points] Improve the appearance of the model and make it good-looking

5. [Bonus 10 points] Make the model more complex. Such as add a new arm.

 

 

Part II:  [125 points] Animation based on Keyframe Interpolation

 

1. You need to write a program that does the following:

 

- Allow the user to select several frames as key frames or key poses. You also need to record the time of each key frame.

- Display all key poses.

- Implement the Catmull-Rom algorithm to interpolate poses for in-between frames.

- Display interpolated motions.

- Write a ReadMe file. The ReadMe file should describe how to specify key frames and how to play interpolated animations.

 

2. Grading:

 

- keyframe selection [10 points]

- keyframe display [5 points]

- keyframe interpolation correct [100 points]

- interpolated animation visualization [10 points]

- Make a good-looking animation [Bonus 10 points]