2012-01-12 69 views
0

我有一个包含多个对象的场景。我怎样才能将它导入到xna中并且指导每个对象的位置?现在我出口的场景.FBX并在这样的模型加载:在xna中导入场景

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

但对象不保留自己的立场,并都聚集在一个点上。

我需要一个方法来导入所有的对象作为单独的对象,但保留在场景中的对象位置?

(即我需要进口的一幕让我可以操纵的对象,并保留在场景中的位置,这样我不应该由我自己重新定位的所有对象)

回答

1

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

//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”的所有对象将与位于世界坐标系原点,这听起来像你正在经历其本地起源的结论。

0

我个人做了一个关卡编辑器的我的游戏中的大部分事情,但我确实有一个与其他模型链接的大型场景。这样我就可以在搅拌机中安排所有关卡。当我导出每个单独的作品时,它保留的是全球的位置并在游戏中正确导入。我会说这个问题存在于你的fbx导出器中。应该有一个选项来保存位置。

你使用的是什么建模程序?如果您使用搅拌机,那么您应该使用专门为XNA制作的fbx导出程序集。