bioviewer - Linux/Windows Biovision BVH Viewer

Download it from the Sourceforge Summary Page. | My Homepage with projects and tutorials

Body in motion

Generic oblong sphereoid viewing mode

Kick Demo .mpg Walking Demo .mpg

Currently these appear only to work with mplayer or other players that use ffmpeg

Try this multiangle flip book if your connection speed is decent.

I've been interested in motion capture technology for some time and I had the opportunity to work with the Ascension Motionstar system. This mocap method uses magnetic sensors strapped to the talent's body parts, and a large heavy box that sources the em field. Time consuming inverse kinematics calculations aren't necessary as each sensor can fully track its own rotation and position. It's cumbersome, prone to error (as the straps are accidently displaced), but also a lot of fun. When mocap is doable with a ordinary pc and one or more video cameras, a lot of interesting applications will become possible. For the present, it's cost-effective only for movies and games and other select uses.

Google shows a lot of professional products that parse and display the biovision bvh and Kaydara fbx format. I didn't see any Free Software, though there was the motView that comes with source, though it doesn't seem to be in active development.

After finding so little, I put together a very basic player using SDL and OpenGL and taking advantage of C++'s standard library. The format is almost self-explanatory from looking at a sample file, and there's plenty of documentation online. The hierarchical nature is key.

I'd like to be able to display the fbx format as well, but it's proprietary and binary, so this would take considerably more effort. As far as I know, this format is non-hierarchical (nothing is keeping limbs attached).

Presently, the player is over-tuned to my sample files, and assumes certain limb/joint names and size.

I've improved upon my coding style, and avoided mixing in C-library calls (this being C++), but I've used old code for the obj loading and other classes so it's uneven.

Initially I thought there was something wrong with my bvh files, or my viewer, and I discovered the problem was that the X,Y, and Z rotations were being applied in the wrong order. For my matrix system, the correct order is location*(Z*X*Y)- check out misc.cpp to see how I'm doing matrix multiplication. Also, I'm using right-handed orientation matrices, where negative z is into the screen. I don't think the bvh format uses this convention, so I had to make some ugly/arbitrary special case adjustments in the code. Normally an orientation matrix is initialized to have 1,1,-1 down the diagonal axis, but for the bvh file I left this at 1,1,1 to avoid mirror reversing all the body parts. It's likely I need to reexamine the original .obj loading code as well and matrix math code- they were written with an inferior level of understanding of 3D math operations, and this 1,1,-1 orientation matrix business may be an artifact of this.

The body parts were modelled in Wings 3D. It'd be nice to implement a bones animation system.

Copyright 2002 Lucas Walter