C# 添加到XNA时Fbx动画模型变形

C# 添加到XNA时Fbx动画模型变形,c#,model,xna,3dsmax,fbx,C#,Model,Xna,3dsmax,Fbx,嘿,我的问题是我已经为我想要的3dsMax创建了完美的模型我使用“蒙皮”修改器装配了一个biped 我正确定位了封套,并使用帧为biped设置了动画,然后将其导出为.fbx,并使用蒙皮模型管道将其加载到XNA中 加载到XNA后,模型会变形,似乎只在模型的右臂上 因为我只是一个新会员,所以我现在不能及时发布图片,所以我会在线发送图片链接 3dsMax型号: 加载的模型 模型的绘图功能 //an array of the current positions of the model meshes

嘿,我的问题是我已经为我想要的3dsMax创建了完美的模型我使用“蒙皮”修改器装配了一个biped

我正确定位了封套,并使用帧为biped设置了动画,然后将其导出为
.fbx
,并使用
蒙皮模型管道将其加载到XNA中

加载到XNA后,模型会变形,似乎只在模型的右臂上

因为我只是一个新会员,所以我现在不能及时发布图片,所以我会在线发送图片链接

3dsMax型号:

加载的模型

模型的绘图功能

//an array of the current positions of the model meshes
this.bones = animationPlayer.GetSkinTransforms();

for (int i = 0; i < bones.Length; i++)
{
       bones[i] *= Transform.World;                   
}

//remember we can move this code inside the first foreach loop below
//and use mesh.Name to change the textures applied during the effect
customEffect.CurrentTechnique = customEffect.Techniques[technique];
customEffect.Parameters["DiffuseMapTexture"].SetValue(diffuseMap);

customEffect.Parameters["Bones"].SetValue(bones);
customEffect.Parameters["View"].SetValue(Game.CameraManager.ActiveCamera.ViewProperties.View);
customEffect.Parameters["Projection"].SetValue(Game.CameraManager.ActiveCamera.ProjectionProperties.Projection);

foreach (ModelMesh mesh in model.Meshes)
{
    //move code above here to change textures and settings based on mesh.Name
    //e.g. if(mesh.Name.Equals("head"))
    //then set technique and all params

    foreach (ModelMeshPart part in mesh.MeshParts)
    {
        part.Effect = customEffect;
    }
    mesh.Draw();
}
//模型网格当前位置的数组
this.bones=animationPlayer.GetSkinTransforms();
for(int i=0;i
我四处张望了很长时间,找不到任何能解决这个问题的方法


非常感谢您的帮助。

在变换骨骼时,请勿在“世界”空间中移动骨骼。 它们应该继承其父变换,因此所有骨骼都必须相对于其父变换进行移动

此外,3dsmax中的缩放/平移矩阵问题可能会导致类似的外观问题。
这可以通过将FBX重新导入3dsmax来检查,如果这样做后看起来不错,那么问题就出在代码中。

我将其作为FBX重新导入max,因此您认为这是代码是正确的。我问了一个程序员,他们让我试试这个。。。。试着用一个只执行平移、只缩放、只旋转的世界矩阵来导入这个模型,但我不完全确定该怎么做……它们可能意味着你每次尝试一种类型,导出一种只平移模型的类型,导出一种只旋转1个骨骼的类型,导出一种只缩放3个单独的类型。哦,是的,我明白了。我这样做了,但仍然会变形。这真的是我的死亡哈哈。因此,您认为这是否指向max问题或明确的代码…如果您让他们打印出旋转/平移等内容,那么您可以与max中的内容进行比较。也可能通过创建一个较小的“装备”更容易调试,例如仅具有两个骨骼的圆柱体。然后旋转骨骼,导出,然后看看发生了什么。是的,我明白了,非常感谢你的帮助。。。非常感谢。