XNA如何创建骨骼

时间:2012-10-07 14:56:03

标签: xna

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

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

或者如何填写ModelBoneCollection?

1 个答案:

答案 0 :(得分:1)

首先 - 您无法在运行时创建或修改Modeldetails)。事实上,如果你需要,你应该implement your ownModel只是让您入门的最低限度的功能。

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

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

要输出的NodeContent是表示模型的树结构。它实际上由MeshContentBoneContent个节点组成(这些节点是从NodeContent派生的类。)

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


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

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

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