XNA中的自定义内容管道,如何手动设置漫反射纹理?

时间:2011-09-09 17:59:08

标签: c# xna fbx content-pipeline

XNA是蜜蜂的膝盖,但我仍然无法将头部完全包裹在自定义内容管道周围。

一些基本样本(如MSDN的法线贴图示例)向您展示了如何将来自.fbx文件的不透明数据的法线贴图键分配给要加载的相应法线贴图纹理。我甚至不知道他们如何知道密钥应该命名的内容,实际上是什么不透明数据,是否在.fbx文件中定义。

有趣的是,内容管道中没有代码说明如何设置漫反射纹理 - 似乎暗示您使用名为“Texture”的着色参数并自动设置它们。但是,如果我将参数重命名为其他内容,则模型会加载没有纹理。

如何隐式知道加载漫反射贴图,以及如何加载漫反射贴图以使用不同名称的着色器参数读取并加载默认的中性白色贴图文件(如果不存在?)

就此而言,是否有一个“hello world”示例用于学习使用内容管道自定义加载模型?

注意,我不打算通过在属性窗口中设置纹理来覆盖.fbx模型中的现有纹理引用。

1 个答案:

答案 0 :(得分:3)

首先要了解的是XNA允许创建两个单独的自定义内容管道项:一个是导入器,另一个是处理器。

编写导入程序时,可以解析任何文件,并将所需信息存储到指定的任何类(对象)中。您可以自己编写类或使用XNA中的某些类。通过这种方式,您可以简单地编写一个从文件中获取数据的导入器,并使用内置的ModelProcessor将其转换为XNA Model类对象。

以下是自定义模型导入程序的示例:

http://create.msdn.com/en-US/education/catalog/sample/custom_model_importer

如果您需要除模型之外的其他对象,请编写自定义处理器:

处理器获取导入器指定的类对象并将其转换为另一个类(因为您正在编写它,任何类以及您指定的任何方式)。此类用于生成.xnb文件(XNA二进制文件),该文件在游戏运行时读取。因此,所有这些只在编译期间运行,以便更好地控制游戏内容。

这是一个很好的入门链接:

http://msdn.microsoft.com/en-us/library/bb447754(v=xnagamestudio.20).aspx

对于您的情况,听起来您对默认FBX导入器的行为不满意。如果是这种情况,您很可能必须自己编写。您很可能不需要编写自己的处理器;将ModelProcessor指定为默认值,就像我的第一个链接中的项目已完成一样。