【原】XNA中Model和BasicEffect配合的问题

为了练习shader,想做一个模型查看器,模型我就直接使用了XNA提供的spacewar里面的飞船。结果出了问题,用我写的shader渲染飞船时座舱罩和几个透明位置的贴图不正确,用BasicEffect就是正确的。但是如果我手动加载BasicEffect使用的FX文件,再用它渲染飞船就又不对了。也就是,只要不用XNA的BasicEffect类模型某些位置的贴图就出错。

开始我以为是在BasicEffect类里面有专门的代码,对不同的Model动了手脚,后来google到了Shawn Hargreaves的博客,发现原来是这么回事:

模型文件(Fbx或X)的顶点格式有很多种,有些带颜色、有些带纹理,BasicEffect的shader支持12种方式渲染模型,为不同的模型顶点选择不同的shader方式并不是BasicEffect做得,而是在ContentPipeline的时候就设置好了。也就是,当把模型文件编译成xnb格式的时候,ContentPipeline根据模型文件里的说明,设置了模型的MeshPart里面的BasicEffect的参数。

对ContentPipeline一直不怎么了解,有空要看一下!

Shawn Hargreaves的原文在http://blogs.msdn.com/shawnhar/archive/2008/08/22/basiceffect-a-misnomer.aspx

posted @ 2009-05-05 15:25  柒笑侠  阅读(754)  评论(0编辑  收藏  举报