如何创建XNA Skinned Model Processor

时间:2011-09-11 22:01:14

标签: c# xna-4.0

我有一个被装配和剥皮的模型,我希望能够以编程方式移动骨骼(而不是存储在fbx文件中的预设动画)

我可以正确加载模型,并看到骨骼已加载,但更改骨骼变换似乎不会影响渲染模型。

我在这里看示例项目:

http://create.msdn.com/en-US/education/catalog/sample/skinned_model

看起来它使用扩展的ModelProcessor(又名SkinnedModelProcessor)来覆盖DefaultEffect并返回一个MaterialProcessorDefaultEffect.SkinnedEffect。我猜这个沿线的某处使得渲染器使用模型骨骼(使用顶点着色器???)变换网格顶点

我在使用SkinnedModelProcessor在我自己的项目中工作时遇到了问题。该示例使用Microsoft.Xna.Framework.Content.Pipeline程序集。在我的项目中,我没有看到.net引用的常规列表中的项目。所以我从文件系统手动添加了它。

问题在于,一旦我编译,visual studio就说它无法找到该命名空间,即使直到我编译它显示一切正常

如何从我自己项目中的示例重新创建SkinnedModelProcessor

如何在渲染模型中反映骨骼的变化?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我正在创建自己的简单Skinned Model Manipulator。目前最简单的方法是在AnimationPlayer类中创建一个允许你改变boneTransforms的新方法。

我为你提供了这样的帮助:

    public void SetPose(Matrix rootTransform, Matrix[] boneAlteration)
    {
        skinningDataValue.BindPose.CopyTo(boneTransforms, 0);
        for (int i = 0; i < boneTransforms.Length; i++)
        {
            boneTransforms[i] = boneAlteration[i] * boneTransforms[i];
        }
        UpdateWorldTransforms(rootTransform);
        UpdateSkinTransforms();
    } 

对于此方法,Matrix Array boneAlteration只是一个Identity Matrices数组,用于维护原始bindPose。在将任何矩阵传递给此方法之前更改任何矩阵以旋转该对应索引的骨骼。

答案 1 :(得分:0)

获得对管道程序集的引用的原因似乎是您必须使用XNA内容管道扩展库项目模板将该代码隔离到单独的特殊项目中