【问题标题】:Pass a specific point on a model to the engine将模型上的特定点传递给引擎
【发布时间】:2013-10-26 17:33:23
【问题描述】:

如果我问的是一个微不足道的问题,我很抱歉,但我什至不知道如何开始在搜索引擎中搜索答案。

我清楚地了解如何在 3ds max 中创建模型并将其加载到 XNA(例如)程序中,我需要的是能够在 3ds MAX 应用程序中选择模型上的一个点,然后能够在任何给定的时间点在我的 XNA 应用程序中跟踪它的世界空间位置。

为什么?我需要它来追踪玩家枪口的位置,以便在玩家开火时在正确的位置产生枪口闪光效果。

如果有任何帮助,我将不胜感激,谢谢。

【问题讨论】:

    标签: 3dsmax coordinate


    【解决方案1】:

    在 XNA 中,通过复制点的骨骼变换很容易解决问题。只需在 3d 创建工具中将点设置为 ModelMesh。例如。在 3ds MAX 中,它是通过将其设置为场景的单独元素。然后在引擎中,您可以通过其 .Name 属性访问 ModelMesh,并通过执行 Model.CopyAbsoluteBoneTransformsTo() 来获取它的位置。还有几个步骤要做,但如果您搜索 CopyAbsoluteBoneTransformsTo,您会找到所需的一切。

    这是帮助我的 Stack Overfrol 文章:

    Position of a modelmesh in XNA

    【讨论】:

      【解决方案2】:

      通常您想在应用程序中使用某种Scene Graph 来管理对象及其转换关系。 3DS Max 也使用场景图,您的导出器和导出文件格式应该会处理好它。

      从那里您可以在 3ds max 中的所需位置附加一个空节点(虚拟对象等)并将其导出到应用程序。假设您的场景图正在工作,您可以检索空节点的世界空间坐标或附加(作为子项)其他对象,例如枪口闪光灯。

      【讨论】:

      • 您能推荐任何有关在 XNA 4.0 中实现场景图的文章吗?我似乎在这个话题上找不到任何东西。据我了解,我特别需要能够将 3ds MAX 的图表导入到我的引擎中,以便能够在编码人员和艺术家之间分配工作(在建模软件中指定一个点并在我的游戏中读取它) ,对吗?
      • 我仍然怀疑它一定有这么难。场景图的存在有很多充分的理由,但对于我的小游戏来说,这可能是矫枉过正。我很快就会深入研究建模,我觉得这应该是可以实现的,彻底为特定的网格部分命名。我在一个动画库中看到了它,他们通过简单地使用动画模型的名称导航到后者的特定节点,将模型附加到动画模型上的一个点。
      【解决方案3】:

      另一个不涉及场景图的解决方案是从网格(子网格)的顶点位置或面位置确定位置。

      但这可能相当棘手,因为我不确定 3ds max 的 VertexID 或 FaceID 是否对应于导出的 id。

      如果您的模型是静态的,您可以使用此picking example 来确定 XNA 内的面部和面部上的拾取位置(谈论重心坐标)。

      您现在可以写下您的面部 ID,然后您应该可以随时使用模型转换来计算选取点在世界空间中的位置。

      【讨论】:

        猜你喜欢
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-08
        • 1970-01-01
        相关资源
        最近更新 更多