将模型上的特定点传递给引擎

时间:2013-05-08 14:01:05

标签: 3dsmax coordinate

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

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

为什么呢?我需要它来追踪玩家枪口的位置,以便在玩家开火时在正确的位置创建一个枪口效果。

感谢您的帮助,谢谢。

3 个答案:

答案 0 :(得分:1)

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

以下是帮助我的Stack Overfrol文章:

Position of a modelmesh in XNA

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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

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