【问题标题】:XNA How to create bonesXNA 如何创建骨骼
【发布时间】:2012-10-08 15:51:38
【问题描述】:

我从二进制文件加载了自定义模型,但现在我不知道如何使用我的骨骼数据。有没有办法将它用于 ModelBone 或类似的东西?我有 CustomBone[]:

class CustomBone 
{
    int parentIndex;
    Vector3 positionAbs;
    Quaternion rotationAbs;
    Vector3 positionRel;
    Quaternion rotationRel;
}

或者如何填充ModelBoneCollection?

【问题讨论】:

    标签: xna


    【解决方案1】:

    首先 - 您不能在运行时创建或修改 Model (details)。事实上,如果你需要,你应该implement your own。 Model 只是帮助您入门的最基本功能。

    但是您可以在构建时通过内容管道创建Model。

    或者,更具体地说,您可以创建一个输出NodeContent 的自定义内容导入器。反过来,这可以通过内容管道传递给ModelProcessor(或您自己的派生类),它将输出ModelContent。您也无法有效地修改ModelContent。 ModelContent 将被序列化,然后在运行时作为Model 加载。

    要输出的NodeContent 是代表您的模型的树结构。它实际上由MeshContent 和BoneContent 节点组成(这些是从NodeContent 派生的类)。

    老实说,要找到该树的确切结构有点棘手(文档非常缺乏)。 Here 是一个可以让您走上正轨的问答。您还可以通过将内置 FbxImporter 与已知模型一起使用并使用 XNA Content Pipeline Debugger(在实现您自己的导入程序时通常会派上用场的工具)检查其输出来获得好运。


    骨骼数据以Matrix 的形式存储在BoneContent.Transform 中。要创建这个矩阵,我相信你需要做这样的事情:

    boneContent.Transform = Matrix.Transform(
            Matrix.CreateTranslation(customBone.positionRel),
            customBone.rotationRel);
    

    如果您想在运行时将骨骼数据保留为 Quaternion,则必须实现自己的 Model 替代方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2017-04-10
      • 2017-05-05
      • 1970-01-01
      相关资源
      最近更新 更多