【问题标题】:How do I load a texture in XNA at runtime?如何在运行时在 XNA 中加载纹理?
【发布时间】:2010-08-16 16:25:40
【问题描述】:

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

  1. Texture2D.FromStream(GraphicsDevice, Stream) 这种方法的问题是它只加载 gif、png 和 jpg 并且我还需要支持 tga 图像。
  2. 创建一个ContentManager 对象。这种方法的问题在于,似乎所有纹理都需要静态添加到项目中,来自文档:“在 ContentManager 加载资产之前,您需要将资产添加到游戏项目中”。有问题的程序是一个关卡编辑器,事先不知道需要哪些纹理。

有没有其他简单的方法来加载纹理,我正在考虑使用其他一些类来加载图像(虽然我不知道是哪个,我对 C# 不是很熟悉)然后也许使用Texture2D.SetData方法?

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

【问题讨论】:

    标签: c# xna xna-4.0


    【解决方案1】:

    有几种方法可以实现你想要的:

    1. 您可以从您的编辑器调用内容管道,动态创建您的内容项目。 WinForms Series 2 Sample 中描述了如何执行此操作。这可能是“最好的”方式,因为它允许您继续使用内容管道。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • FromFile 在 XNA 4.0 中被替换为 FromStream。鉴于 OP 使用的是FromStream,他们可能想要一个与 XNA 4.0 兼容的答案。
      • 为什么需要手动处理?是因为它没有使用内容加载器吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 2014-09-11
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      相关资源
      最近更新 更多