【问题标题】:Position of a modelmesh in XNA模型网格在 XNA 中的位置
【发布时间】:2013-01-30 04:23:34
【问题描述】:

如何在 XNA 中找到模型内部网格的矢量 3 位置(在全局坐标中)?

我在搅拌机中制作了一个简单的灯柱模型。灯光应该在的位置,我将单个顶点作为自己的对象并将其命名为“灯光”,在位置,典型的灯光将位于灯柱中.

在我的 XNA 程序中,我想在模型的位置放置一个浮点光。我可以按名称找到网格。但需要“Light”网格的 Vector3 位置 来完成。

【问题讨论】:

    标签: model matrix xna position


    【解决方案1】:

    这取决于如何根据网格/骨骼层次设置模型。最终,您将光(灯泡)矩阵与其父级相乘,父级首先乘以其父级,以此类推一直到根,然后获取结果的平移属性。有一个内置方法可以做到这一点,称为 Model.CopyAbsoluteBoneTransformsTo(Matrix[])

    Matrix[] transforms = new Matrix[SimpleLampPostModel.Bones.Count];
    SimpleLampPostModel.CopyAbsoluteBoneTransformsTo(transforms);
    
    Vector3 lightPosition = transforms[SimpleLampPostModel.Meshes["light"].parentBone.Index].Translation;
    lightPosition += modelWorld.Translation;// if the model is located in some arbitrary location in your 3d
                                            // world as represented by a world matrix (modelWorld)
    

    【讨论】:

    • 好吧,这是有道理的,我只是试了一下,它肯定接近了,PICTURE LINK。我检查了网格的位置,它们位于正确的位置。会有什么特别的原因造成这种差异吗?/我有什么方法可以将我的代码发布/收件箱吗?
    • 你可以将它粘贴到一个 pastebin 中,我可以从那里查看它。如果可以,也可以将 fbx 导出为 ascii 格式并粘贴。 pastebin.com
    • 好吧,模型是 7mb,所以它不适合 pastebit(上限为 500kb)。所以我将把它的第一部分放在Pastebin Model 这是我正在使用的两个特别相关的类。 CModel 和普通的Game1。如您所见,我的灯被称为“Light_down_255_255_255”,这是因为我要在程序中对其进行解析以使灯(面朝下,为白色)到目前为止感谢您的帮助。
    • 我的电子邮件地址在我的帐户简介中。我想我需要整个 7mb 来帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 2015-06-12
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多