如何在运行时在XNA中加载纹理?

时间:2010-08-16 16:25:40

标签: c# xna xna-4.0

我正在开发一个使用XNA框架进行3D渲染的应用程序。我现在想从文件加载纹理。到目前为止,我找到了两种方法:

  1. Texture2D.FromStream(GraphicsDevice, Stream)这种方法的问题是它只加载gif,png和jpg,我还需要支持tga图像。
  2. 创建一个ContentManager对象。这种方法的问题在于,似乎需要将所有纹理静态添加到项目中,从文档中说明:“在ContentManager加载资产之前,您需要将资源添加到游戏项目中”。有问题的程序是一个关卡编辑器,需要预先知道哪些纹理。
  3. 有没有其他简单的方法来加载纹理,我正在考虑使用其他类来加载图像(虽然我不知道哪个,我对C#不是很熟悉)然后可能使用Texture2D.SetData方法?

    还有其他简单的方法来实现我想要实现的目标吗?

2 个答案:

答案 0 :(得分:3)

有几种方法可以达到你想要的效果:

  1. 您可以在编辑器中的中调用内容管道,动态创建您的内容项目。如何做到这一点在WinForms Series 2 Sample中有所描述。这可能是“最好的”方式,因为它允许您继续使用内容管道。

  2. 正如您所说,您可以自己解码TGA文件并使用SetData。 Google上的C#TGA阅读器有很多结果。 This is the first one

答案 1 :(得分:2)

之前我使用过Texture2D.FromFile(device, path),效果很好。但偶尔我会遇到问题,并且还必须指定TextureCreationParameters并将它们传入。请记住,您需要手动处理加载的Texture2D。