4

I have a model in Blender (2.6+) with rigged animation. I exported it to FBX and import it to XNA. I know ho to draw it on the screen but how can I run the animation (called for example "run")?

Thanks!

Darkry
  • 590
  • 2
  • 12
  • 26
  • 2
    See http://create.msdn.com/en-US/education/catalog/sample/custom_model_rigid_and_skinned and http://blog.diabolicalgame.co.uk/2011/07/exporting-animated-models-from-blender.html – Eric Smith Nov 26 '11 at 18:45

1 Answers1

7

You can use the SkinnedModelSample from microsoft. Make sure you set the ContentProcessor property of the fbx file to SkinnedModelProcessor in the Properties box, Then you can do (needs optimizing):

Main Game class:

AnimationPlayer player;// This calculates the Matrices of the animation
AnimationClip clip;// This contains the keyframes of the animation
SkinningData skin;// This contains all the skinning data
Model model;// The actual model

LoadContent Method:

model = Content.Load<Model>("path_to_model");
skin = model.Tag as SkinningData;// The SkinnedModelProcessor puts skinning data in the Tag property

player = new AnimationPlayer(skin);
clip = skin.AnimationClips["run"];// The name of the animation

player.StartClip(clip);

Draw Method:

Matrix[] bones = player.GetSkinTransforms();

// Compute camera matrices.
Matrix view = Matrix.CreateLookAt(new Vector3(0, 0, -30), // Change the last number according to the size of your model
                                          new Vector3(0, 0, 0), Vector3.Up);

Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4,
                                                        device.Viewport.AspectRatio,
                                                        1,
                                                        10000);

// Render the skinned mesh.
foreach (ModelMesh mesh in model.Meshes)
{
    foreach (SkinnedEffect effect in mesh.Effects)
    {
        effect.SetBoneTransforms(bones);

        effect.View = view;
        effect.Projection = projection;

        effect.EnableDefaultLighting();

        effect.SpecularColor = new Vector3(0.25f);
        effect.SpecularPower = 16;
    }

    mesh.Draw();
}
annonymously
  • 4,708
  • 6
  • 33
  • 47