【问题标题】:import scene in xna在 xna 中导入场景
【发布时间】:2012-02-08 15:05:44
【问题描述】:

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

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

但对象不会保留它们的位置,而是全部聚集在一个点上。

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

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

【问题讨论】:

    标签: c# xna


    【解决方案1】:

    每个对象的场景位置都在 fbx 中。获取和实现它的方法是创建一个矩阵数组来保存每个对象相对于场景原点的变换,然后在绘制期间为每个对象设置 effect.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”,所有对象都将使用位于世界原点的本地原点进行绘制,这听起来就像您正在经历的那样。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-05
        • 1970-01-01
        • 2013-06-25
        • 1970-01-01
        • 1970-01-01
        • 2019-06-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多