Blender动画到XNA失真bug

时间:2014-07-11 21:59:21

标签: c# animation matrix xna

我按照以下视频中的说明操作: www.youtube.com/watch?v=SissgQ0IXvk

我正在使用XNA 4.0和Blender 2.69

我将带动画的模型导出到.FBX文件。

动画是一个挥手的人

以下是Blender的样子:

i.stack.imgur.com/481r9.jpg

以下是它在XNA中呈现的方式:

i.stack.imgur.com/iWk1E.jpg

动画发生的手臂非常扭曲。

我相信错误发生在AnimationPlayer类中:

        /// <summary>
    /// Helper used by the Update method to refresh the WorldTransforms data.
    /// </summary>
    public void UpdateWorldTransforms(Matrix rootTransform)
    {
        // Root bone.
        worldTransforms[0] = boneTransforms[0] * rootTransform;

        // Child bones.
        for (int bone = 1; bone < worldTransforms.Length; bone++)
        {
            int parentBone = skinningDataValue.SkeletonHierarchy[bone];

            worldTransforms[bone] = boneTransforms[bone] *
                                         worldTransforms[parentBone];
        }
    }


    /// <summary>
    /// Helper used by the Update method to refresh the SkinTransforms data.
    /// </summary>
    public void UpdateSkinTransforms()
    {
        for (int bone = 0; bone < skinTransforms.Length; bone++)
        {
            skinTransforms[bone] = skinningDataValue.InverseBindPose[bone] *
                                        worldTransforms[bone];
        }
    }

我认为可以通过编辑上面的代码修复错误,我只是不知道该怎么做。 有人可以帮我解决这个失真错误吗?

以下是项目源代码的链接:

www.mediafire.com/download/ps5ocf1nxbfgrru/SkinningSample_4_0.zip

以下是Blender文件的链接:

www.mediafire.com/download/vrt8h1p83vkd76g/wave.blend

2 个答案:

答案 0 :(得分:1)

XNA已经停产,所以这个&#39; hack&#39;已被删除。 Monogame通常被视为替代品,但它仍然没有解决这个问题。

答案 1 :(得分:0)

发现问题。 XNA的内容管道似乎无法正确处理动画FBX。所以XNA有一个bug。幸运的是,Blender 2.68a及更早版本对此有一个“修复”。导出FBX时,只需检查“XNA旋转动画黑客”。