【问题标题】:How to recreate XNA's SkinnedModelProcessor如何重新创建 XNA 的 SkinnedModelProcessor
【发布时间】:2011-11-14 22:40:00
【问题描述】:

我有一个经过装配和蒙皮的模型,我希望能够以编程方式移动骨骼(而不是存储在 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

或

如何让骨骼的更改反映在我的渲染模型中?

【问题讨论】:

    标签: c# xna-4.0


    【解决方案1】:

    我遇到了同样的问题,我正在创建自己的简单蒙皮模型操纵器。目前最简单的方法是在 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 只是一个用于维护原始 bindPose 的 Identity Matrices 数组。在将任何矩阵传递给此方法之前更改任何矩阵以旋转相应索引的骨骼。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-23
        • 2013-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多