1

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

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

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

我会很感激任何帮助,谢谢。

4

3 回答 3

1

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

这是帮助我的 Stack Overfrol 文章:

模型网格在 XNA 中的位置

于 2013-07-17T07:08:02.957 回答
0

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

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

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

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

于 2013-05-15T13:36:55.850 回答
0

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

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

于 2013-05-13T15:42:17.633 回答