1

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

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

或者如何填充 ModelBoneCollection?

4

1 回答 1

1

首先 - 您不能Model在运行时创建或修改 a (详细信息)。事实上,如果你需要,你应该实现你自己的. Model只是让您入门的最低限度的功能。

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

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

NodeContentto 输出是代表您的模型的树结构。它实际上由MeshContentBoneContent节点组成(这些是派生自 的类NodeContent)。

老实说,该树的确切结构很难追踪(文档非常缺乏)。是一个应该让您走上正轨的问题和答案。FbxImporter您还可以通过使用带有已知模型的内置函数并使用XNA Content Pipeline Debugger(在实现您自己的导入程序时通常会派上用场的工具)检查其输出来获得好运。


骨骼数据存储为Matrixin BoneContent.Transform。要创建此矩阵,我相信您需要执行以下操作:

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

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

于 2012-10-08T07:51:38.537 回答