`
andyjackson
  • 浏览: 57312 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

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的纹理的处理。
  
  • 大小: 17.9 KB
  • 大小: 9.6 KB
  • 大小: 9.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics