2010-08-16 15 views
7

Estoy trabajando en una aplicación que usa el framework XNA para hacer su renderización en 3D. Ahora quiero cargar una textura del archivo. He encontrado dos métodos hasta ahora:¿Cómo cargo una textura en XNA en tiempo de ejecución?

  1. Texture2D.FromStream(GraphicsDevice, Stream) El problema con este enfoque es que sólo carga GIF, PNG y JPG y también necesitan apoyo para las imágenes TGA.
  2. Crea un objeto ContentManager. El problema con este enfoque es que parece que todas las texturas deben agregarse estáticamente al proyecto, a partir de la documentación: "Antes de que ContentManager pueda cargar un activo, debe agregar el activo a su proyecto de juego". El programa en cuestión es un editor de niveles y las texturas que se necesitan no se conocen de antemano.

¿Hay alguna otra manera fácil de cargar la textura, estoy pensando en usar alguna otra clase para cargar la imagen (aunque no sé cuál, no estoy muy familiarizado con C#) y luego quizás use el método Texture2D.SetData?

¿Hay alguna otra manera fácil de lograr lo que estoy tratando de lograr?

Respuesta

3

Hay algunas maneras de lograr lo que quiere:

  1. Usted podría invocar la tubería de contenido desde dentro su editor, la creación dinámica de contenido de su proyecto. Cómo hacer esto se describe en el WinForms Series 2 Sample. Esta es probablemente la "mejor" forma, porque le permite seguir usando la canalización de contenido.

  2. Usted podría, como usted dice, decodificar el archivo TGA usted mismo y usar SetData. Hay muchos resultados para los lectores C# TGA en Google. This is the first one.

2

He usado Texture2D.FromFile(device, path) antes, y funciona bien. Sin embargo, ocasionalmente encontraré problemas y también tendré que especificar TextureCreationParameters y pasarlos. Tenga en cuenta que tendrá que deshacerse del Texture2D cargado manualmente.

+4

'FromFile' fue reemplazado por' FromStream' en XNA 4.0. Dado que OP está utilizando 'FromStream', probablemente quieran una respuesta compatible con XNA 4.0. –

+0

Lo siento ... todavía estoy trabajando en XNA 3.1. – bporter

+1

Yo también, pero vale la pena leer el blog de Shawn Hargreaves;) –

Cuestiones relacionadas