如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
11.3AnimatedModelProcessor现在你需要创建一个新的模型处理器(modelprocessor)扩展XNA默认的模型处理器。你将使用这个新模型处理器处理动画模型,提取骨骼和动画,并将它们存储为一个AnimatedModelData对象。要创建一个新模型处理器你应创建一个叫做AnimatedModelProcessorWin的新的素材管道扩展库(ContentPipelineExtensionLibrary)项目。这个库项目来自于一个新素材处理器类(contentprocessorclass),并会自动将素材管道组件(ContentPipelineassembly,Microsoft.Xna.Framework.Content.Pipeline)添加到项目中。因为你将使用AnimatedModelContentWin库(上一部分建立的)存储动画数据,所以你还需要将这个库添加到项目中。代码如下:[ContentProcessor]publicclassContentProcessor1:ContentProcessor<TInput,TOutput>{publicoverrideTOutputProcess(TInputinput,ContentProcessorContextcontext){//TODOthrownewNotImplementedException();}默认素材处理器类扩展了ContentProcessor类,它作为任何素材管道处理器的基类,用来处理类型为Tinput的对象并输出为类型为TOutput的新对象。因为你对创建一个新的素材处理器不感兴趣,只想扩展某些功能,所以你应扩展一个已有的素材处理器而不是ContentProcessor类。在这里,你将扩展ModelProcessor类,它是默认的模型处理器类。你还要把你的新素材处理器类重命名为AnimatedModelProcessor。以下是代码:[ContentProcessor]publicclassAnimatedModelProcessor:ModelProcessor{publicstaticstringTEXTURES_PATH="Textures/";publicstaticstringEFFECTS_PATH="Effects/";publicstaticstringEFFECT_FILENAME="AnimatedModel.fx";publicoverrideModelContentProcess(NodeContentinput,ContentProcessorContextcontext){protectedoverrideMaterialContentConvertMaterial(MaterialContentmaterial,ContentProcessorContextcontext){...}}}在ModelProcessor类中有很多方法可以重写,但处理动画模型只需重写Process和ConvertMaterial方法。主要方法是Process方法,这个方法需要将一个NodeContent对象——包含网格、骨骼和动画——转换为ModelContent对象——存储XNA模型对象的数据。除了Process方法,还要调用ConvertMaterial方法处理模型材质。重写默认的处理方法这部分你将重写ModelProcessor类的Process方法,这个方法用以处理模型。你还将创建两个新方法提取模型骨骼和动画:ExtractSkeletonAndAnimations方法和ExtractAnimations方法,ExtractAnimations在ExtractSkeletonAndAnimations方法中调用。以下是代码:publicoverrideModelContentProcess(NodeContentinput,ContentProcessorContextcontext){//ProcessthemodelwiththedefaultprocessorModelContentmodel=base.Process(input,context);//NowextractthemodelskeletonandallitsanimationsAnimatedModelDataanimatedModelData=ExtractSkeletonAndAnimations(input,context);//StorestheskeletalanimationdatainthemodelDictionary<string,object