I am looking to animate a 3D avatar made with Blender with the Kinect skeleton data.
Any hints how to do it?
Have a look at the Assimp library. There is also a Cinder block for it. Assimp allows you to load model and animation data from a great number of file formats. See if you can export the animation to an FBX file, which has worked well for me in the past.
I’ve integrated Assimp last year in a project, which took me roughly a week to get a skinned animation model playing correctly. Recently, I also played a bit with Per Object Motion Blur, for which I also used Assimp to play an animation. You can find more info in the description of this YouTube video:
Edit: I realize you may not have animation data and are instead taking data from the Kinect directly. This is a bit more complicated. If you’re lucky, the skeleton for your rigged figure is very similar to the Kinect’s, and you can probably construct the bone matrices with little effort. You do need to know precisely how bones work, so make sure to read up on it.
If the skeleton has a different size (e.g. your rigged model is that of a leprechaun with tiny legs), you’ll find that you can’t use the Kinect skeleton data directly, as this would cause some parts of the body to penetrate other parts. You’ll need to apply what is called “motion retargeting”, which is a rather difficult process that I myself have never attempted.
A more basic, less perfect but acceptable solution than retargeting is creating the 3d avatar skeleton similarly to the skeleton returned by the kinect. For example, the rest pose of OpenNI is a T pose, you set the 3d avatar’s rest pose to match this exactly. When the user is moving you copy the orientations returned by OpenNI to the avatar bones, make sure the node orientations are not relative to the parent, but absolute. When you are ready with the bone rotations and everything looks right you can continue with the movement, for which a simple solution is to set the location of the hip center node. Without retargeting you will encounter skating and floating, which can be decreased with a bit of heuristics.