我按照以下视频中的说明操作: 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
答案 0 :(得分:1)
XNA已经停产,所以这个&#39; hack&#39;已被删除。 Monogame通常被视为替代品,但它仍然没有解决这个问题。
答案 1 :(得分:0)
发现问题。 XNA的内容管道似乎无法正确处理动画FBX。所以XNA有一个bug。幸运的是,Blender 2.68a及更早版本对此有一个“修复”。导出FBX时,只需检查“XNA旋转动画黑客”。