在xna中导入场景

时间:2012-01-12 10:01:56

标签: c# xna

我有一个包含多个对象的场景。如何在xna中导入它并保证每个对象的位置?现在我导出.fbx中的场景并将其加载到这样的模型中:

 cube.model = contentManager.Load<Model>("cub");

但物体不会保持其位置,而是全部聚集在一起。

我需要一种方法将所有对象导入为单个对象,但是要保留场景中的对象位置?

(即我需要导入场景,以便我可以操纵对象并保留它们在场景中的位置,这样我就不应该自己重新定位所有对象)

2 个答案:

答案 0 :(得分:1)

每个对象的场景位置都在fbx中。获得它并实现它的方法是创建一个矩阵数组来保存每个对象相对于场景原点的变换,然后在绘制时为每个对象设置效果时使用适当的变换。

//class variables
Matrix[] objectTransforms;

//LoadContent section
cube.model = contentManager.Load<Model>("cub");
objectTransforms = new Matrix[cube.model.Bones.Count];
cube.model.CopyAbsoluteTransformsTo(objectTransforms);// the magic is done here

//draw method
foreach(ModelMesh mm in cube.model.Meshes)
{
foreach (BasicEffect bfx in mm.Effects)
{
   bfx.World = objectTransforms[mm.ParentBone.Index] * whateverLocalTransformYouWant;
   //draw here
}
}

如果不使用'objectTransforms',将使用位于世界原点的本地原点绘制所有对象,这听起来就像您正在经历的那样。

答案 1 :(得分:0)

我亲自为游戏中的大部分内容制作了一个关卡编辑器,但我确实在混合器中有一个大型场景链接到其他模型。这样我就可以在搅拌机中安排所有级别的部分。当我导出每个单独的片段时,它确实保留全局位置并在游戏中正确导入。我会说这个问题存在于你的fbx导出器中。应该有一个保留位置的选项。

您使用的是什么建模程序?如果你使用blender,你应该使用一个专为XNA设计的fbx导出器。