2012-10-07 58 views
1

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

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

或者如何填充ModelBoneCollection?

回答

1

首先 - 您不能在运行时创建或修改Modeldetails)。如果事实上,如果你需要,你应该implement your ownModel仅仅是让你开始的最小功能。

但是,您可以通过内容管道在制作时处创建Model

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

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

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


骨数据被存储为一个BoneContent.TransformMatrix。为了创建这个矩阵,我相信你需要做这样的事情:

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

如果你想保持你的骨骼数据作为Quaternion在运行时,你将不得不落实Model你自己的选择。