我在3DS Max中创建了一个带有股票引擎模型的场景,还有一些我添加了自己,平面和按钮的东西。
http://i.stack.imgur.com/R2iva.png
无论我如何导出场景,无论是使用熊猫导出器的.X还是使用2012.2 fbx导出器的.fbx,当加载到XNA并渲染时,它们都显示在彼此之上。
http://i.stack.imgur.com/6gdMb.png
由于引擎的各个部分都保留在它们应该的位置(并且在3ds max中是单独的),我非常确定在3ds max中有一些东西我没有正确设置其他对象的布局。
更新1:我用于在xna中加载模型的代码如下
Matrix[] transforms = new Matrix[model.Bones.Count];
model.CopyAbsoluteBoneTransformsTo(transforms);
foreach (ModelMesh mesh in model.Meshes)
{
foreach (BasicEffect be in mesh.Effects)
{
be.EnableDefaultLighting();
be.Projection = camera.projection;
be.View = camera.view;
be.World = GetWorld() * mesh.ParentBone.Transform;
// adding the additional * transforms[i]; didnt do anything
}
mesh.Draw();
}
此代码适用于其他人的模型,但不适用于我制作的任何模型。就像3ds max不会导出我在场景中相对于场景原点创建的对象的位置。
答案 0 :(得分:1)
您需要组合来自父骨骼和子骨骼的所有变换矩阵,如下所示:
Matrix[] transforms = new Matrix[model.Bones.Count];
model.CopyAbsoluteBoneTransformsTo(transforms);
foreach (ModelMesh mesh in model.Meshes) {
foreach (BasicEffect ef in mesh.Effects) {
ef.World = transforms[mesh.ParentBone.Index];
//Also do other stuff here, set projection and view matrices
}
}
可能有更好的方法,但这段代码应该有用。