Quiz 4: Study Guide

Quizzes are open book. 30 minutes at the start of class


  • Transformations

  • Skeletons

  • Motions

Unless explicitly asked to compute a final answer, it is sufficient to write out the formula and plug-in values.

Practice questions

1) For the following questions, suppose frame 1 is rotations 30 degrees around the Z axis and translated (1,4,6) units with respect to the world coordinate system.

  • Draw frame 0 and frame 1.

  • What is the 4x4 homogeous transformation matrix? What is the 2x2 block matrix corresponding to this transformation?

  • What is the coordinate of frame 1’s origin with respect to frame 0?

  • What is the coordinate of (1,0,0) in frame 1 with respect to frame 0?

  • What is the coordinate of frame 0’s origin with respect to frame 1?

2) Suppose we have a three link kinematic chain. Joint 1 is located at point p1 = (-1,-1,0) and rotated 30 degrees around the global Z axis. Joint 2 is positioned relative to joint1 at location p2 = (1, -1, 0) and rotated 45 degrees in Z. Joint 3 is positioned relative to joint 2 at location p3 = (-1, -1, 0) and rotated 10 degrees around Z.

  • Draw the kinematic chain described above.

  • What is the global position of joint 3?

  • What is the global position of joint 2?

  • What is the global position of joint 1?

  • What is the position of joint 2 relative to joint 3?

  • Write pseudocode to compute the local2global transforms for each joint in the chain. Assume each joint stores its local2parent transform as well as pointers to its parent and children joints. Assume that the root joint’s parent is NULL.

3) Suppose an object is rotated 50 degrees around Z, what is the 3x3 rotation matrix corresponding to the object’s orientation? Draw the frame corresponding to the object and the frame corresponding to the world coordinate system. If a point as position p = (1,1,0) in frame 1, what is its coordinate in frame 0? Draw the point p.

4) Each joint has its own local reference frame. What is the position of a joint with respect to its own reference frame?

5) Recall that we can combine a sequence of transformations into a single transformation by multiplying them together. For example, consider the following sequence of transformations

\[H^{world}_{Hips} H^{Hips}_{RightUpLeg} H^{RightUpLeg}_{RightLeg} H^{RightLeg}_{RightFoot}\]

Each \(H_i^j\) transforms from each joint to its parent (e.g. local2parent transform). What transformation do we get if we multiply these matrices together?

6) If we multiply the position of the right foot (in local coordinates) by the matrix from the previous question, what do we get?

7) How can we define a motion for a character?

8) What are two methods for storing motions in terms of poses?

9) What is a keyframe? What is a pose? How do poses and keyframes relate to skeletons?

10) Suppose we have a 2s motion captured at 120 fps. How many frames does it have?

11) Suppose we have a 12 frames recorded for a motion at 24 fps. How long is the motion?

12) Suppose we had a snake character with 5 joints. Define a skeleton for this character. What might a pose for this character look like if we did not allow the joints to change length?

13) What is the difference between local and global coordinates? If we have a local position for a joint, how can we convert it to global coordinates and vice versa? How about a local direction vector?

14) Suppose we have a looping motion which snaps back to the start position when it replays. Why does this happen and how can we fix it?

15) Suppose we wish to edit a motion so that the character starts at the origin and moves in the direction of positive Z. Write pseudocode to accomplish this.

16) Suppose we have two motions, a sad walk and a happy walk, which we’d like to blend together. What are factors that would effect the quality of blend?

17) Suppose we compute a blended motion M = M1 * (1-alpha) + M2 * alpha. Will this blend always look good? Why or why not?

18) How does crossfade blending work?

19) Suppose we wish to change the rotation of spine for a motion so it lurches forward. Write pseudocode for doing this.