我从二进制文件加载自定义模型,但现在我不知道如何使用我的骨骼数据。有没有办法将它用于ModelBone或类似的东西?我有CustomBone []:
class CustomBone
{
int parentIndex;
Vector3 positionAbs;
Quaternion rotationAbs;
Vector3 positionRel;
Quaternion rotationRel;
}
或者如何填写ModelBoneCollection?
答案 0 :(得分: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
替代方案。