Simple MoCap

   The page is written and maintained by Min Zhong, last modified April, 2000.


Overall
Overall look of the system
A close up
CS 838 Animation
Project 2
Prof. Gleicher
 

Min Zhong
Jake Kretz

April, 2000

Overview
This is a self-directed motion capture system. Many buttons have warning/help to guide the user through correct usage of the system. With the knowledge of different mouse
functions, one can learn to use the system without reading other parts of the user manual.
 

References back to Overview.


Features and Implementation discussion back to Overview.

Usage

Mouse
    The two mouse buttons manuvers the camera movement.
    In OMIN mode
        CTRL+LMB: the horizontal dragging motion enables zoom in and out
        LMB:    dolly and rotates the world.
    FOLLOW mode
        CTRL+LMB:  the horizontal dragging motion enables zoom in and out
        LMB:    Horizontal dragging rotates the view horizontally.  The horizontal angle is restricted to 0-360, so drag the other direction when it stops responding to mouse movement.
        RMB:    Vertical dragging rotates the view vertically.  The vertical angle is restricted to 0-90, so drag the other direction when it stops responding to mouse movement.

Motion file loading
    upon loading a new .bvh, all keys and markers are cleared and interp and marker browsers are reset to default setting.

Display
    It is capable of displaying three rotations (Euler, quaternion, and exponential map) simultaneously for visual comparison.
    On each rotation interpolation type browser, choose "hide" to hide the motion from that rotation, "None" to show the non-interpolated motion for that rotation type, or
    others for appropriate interpolation type.

    Viewing range can be changed by specifying new "begin" and "end" frames.

Markers
-loading marker placement file
    Marker request files can be loaded using the "Load Marker Request" button any time during the animation. As new marker file is loaded, old markers are erased.
    Each invalid marker (non existing parent joint) is automatically ignored with a warning message displayed.
-display
    Markers are displayed for the choosen rotation on the "marker type" browser if that rotation is currently on display ("Hide" not selected).
    The last 20 frames of each marker trace are displayed.
-export
    Marker information exported is for the choosen interpolation type (rotation interpolation browser) of the choosen rotation type (Marker type browser).

Endsite markers
    Choose the endsite(s) want to be traced in the endsite browser, set "marker type" browser to the desired rotation type,
    and make sure that rotation type is not on "Hide" selection from its interpolation browser.
    This is an after-thought add-on after everything else is implemented.  So only one type of rotation trace is shown at a time.
    It would have been neat to be able to compare traces for differenct interpolation type.
    Endsite browser: hold down CTRL or SHIFT key to select multiple or toggle.

Keyframing
    Two modes are available: automatically key every nth frame or manually select each key frame.
    For complex motion, it is recommanded that key nth for a reasonable value of "nth", then customally key the missing important frames to achieve good effect.
        "Key this frame": first drag the slider to the desired key frame, and then click the button to key it.
        "Un-key" works similarly. It removes the key frame the time slide is pointing at.
        "Display keys" button displays all keys keyed so far on console.
        "Clear keys" clears all keys.

back to Overview.


Source Code and the end product

    proj2.exe    (585KB)
    proj2.dsp
    proj2.dsw
    some sample bvh motion data files in this directory

     proj2.h        has includes and some defines.
    main.cpp     pops up the UI, starts the even loop.
    debug.cpp, debug.h:    for debug prints.
    3DUtils.cpp:    callbacks and related.
    RunButton.cpp, RunButton.h:    Play button and slider related.
    viewer.cppviewer.h:    Gl_Win class methods
    parser.cpp:    reads in the .bvh motion data and fills a MotionCapturer object.
    MotionCapturer.cpp, MotionCapturer.h:    defines the structure for parsed data, most related functions in parser.cpp.
    RotConverter.cpp, RotConverter.h:     converts between Euler, quaternion and exponential map representations.
    interpolater.cpp:    handles interpolation.
    quatSpline.cpp:    quaternion spline related.
    stage.cpp:    camera, lighting and shadow related.
    Marker.cpp  Marker.h:     marker trace related
    vector.cpp, vector.h:    3D and 4D vector manipulation library.

That's all folks! back to Overview.