首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

XNA学习札记2-统一内容管道

2012-12-21 
XNA学习笔记2-统一内容管道上一节中用元素表示所有XNA能够加载并处理的内容,并谈论了所有这些元素所需要的

XNA学习笔记2-统一内容管道
   上一节中用元素表示所有XNA能够加载并处理的内容,并谈论了所有这些元素所需要的两个最基本的Matrix。今天讨论一下所有这些元素的知识。
   在XNA中,统一使用内容管道(content pipeline)框架提供支持。一个完整的内容管道是由导入器 (importer),处理器(processor),串行化器(serializer)和反串行化器(deserializer(组成的。
   导入器:读取源文件并提取有用的数据,这个数据是存储在一个指定的标准格式中的。例如对一个模型,标准格式是NodeContent对象,对一个图像,标准格式是TextureContent 对象。这种标准格式叫做DOM对象。
   处理器:处理包含在DOM对象中的数据并生成在游戏中可用的对象。例如对模型来说,处理器可以添加法线数据,计算切线,设置effect等。
   串行化器或TypeWriter:定义了如何从处理器的输出生成.xnb二进制文件。
   反串行化器或TypeReader(运行时):定义了如何从存储在.xnb文件的二进制数据流中构建游戏对象。因为这里不需要处理计算,相对于编译过程来说这个过程几乎不花费时间。
 
   自定义内容处理器。XNA支持自定义处理器,这样可以对导入器得到的DOM对象进行特殊的处理,比如修改其中的颜色。
   方法是:在VS中新建一个Content Pipeline库项目(最后生成库文件),完成Process类的process方法。下面是一个自定义的纹理处理器。

        public override TextureContent Process(TextureContent input, ContentProcessorContext context)         {            TextureContent texContent = base.Process(input, context);             texContent.ConvertBitmapType(typeof(PixelBitmapContent<Color>));                         for (int face = 0; face < texContent.Faces.Count; face++)             {                 MipmapChain mipChain = texContent.Faces[face];                 for (int mipLevel = 0; mipLevel < mipChain.Count; mipLevel++)                 {                     PixelBitmapContent<Color> image = (PixelBitmapContent<Color>) input.Faces[face][mipLevel];                     image.ReplaceColor(Color.Black, Color.White);                 }            }             return texContent;         }

   好了,下节将讨论2D的纹理的处理。
  

热点排行