2010-04-18 34 views
5

Estoy trabajando en un juego y todos mis gráficos usan magenta como color transparente/mágico. Son todos de 32 bits y el magenta es solo por conveniencia. De todos modos, agradecería que alguien me aconsejara qué biblioteca debo usar para cargar mis imágenes (necesito cargarlas en formato GL_RGBA, tanto internas como específicas de la textura).Cargando texturas PNG en OpenGL

Respuesta

1

Aparte de las otras respuestas mencionan SDL y diablo, hay dos opciones a considerar:

  • Uso LibPNG directamente. Esto probablemente tendrá el menor impacto en el tamaño del código, si eso es importante, ya que no se hinchará en otros formatos que no esté usando, ni DLL, etc.
  • Utilice la carga de texturas del sistema operativo. Esta puede ser una buena forma de reducir las dependencias si prefiere usar las características del sistema operativo en lugar de las bibliotecas externas. GDI + en Windows XP y versiones posteriores tiene carga de texturas incorporada para algunos formatos como PNG y JPEG, y no lo sé con certeza, pero otros sistemas operativos pueden tener características similares. ¡Es muy sencillo enganchar GDI + en OpenGL y luego el SO se está ocupando de la carga de tu textura!
+0

¿Muestra de código para la carga de GDI +? – Macke

+0

Ver GLTexture :: LoadFromFile() desde la línea 510 aquí: http://construct2.svn.sourceforge.net/viewvc/construct2/source/common/cr/glrenderer/glrenderer_windows.cpp?revision=102&view=markup Podría ser un poco más complicado de lo que necesita, utiliza texturas premultiplicadas y tiene código para copiar la textura en una superficie de poder de dos con cunetas transparentes. – AshleysBrain

+0

¿Por qué preocuparse acerca de cómo cargar imágenes, cuando hay bibliotecas alrededor que lo hacen por usted? – Danvil

5

DevIL puede cargar prácticamente todos los formatos de archivo y puede crear directamente texturas OpenGL. Es la forma más fácil de ir.

También debe usar un formato de archivo que admita un canal alfa (PNG, TGA, ...). ¡Usar un "color mágico" en imágenes de 32 bits está realmente desactualizado!

+0

Usar DevIL y OpenGL juntos para cargar imágenes es extremadamente fácil, casi todos los números mágicos son los mismos (por diseño). Tengo un código (no hay promesas de que sea el mejor ;-)) para hacer eso aquí (función loadShaderTexture): http://nwshader.svn.sourceforge.net/viewvc/nwshader/nwshader/init.cpp?revision=18&view=markup – ssube

7

Si solo es necesario el soporte PNG, use libpng. Se supone que DevIL es fácil, pero está un poco hinchado (hace mucho más que solo cargar imágenes) e internamente llama funciones OpenGL que pueden interferir con su propia lógica OpenGL.

Personalmente prefiero SDL_image, ya que de todos modos estoy usando SDL en mis proyectos. Aunque no es inmediatamente obvio, la función SDL_BlitSurface() puede hacer la conversión desde cualquier IMG_Load() regresa al formato de píxel necesario.

+1

DevIL se puede usar para cargar imágenes (no llamadas OpenGL) o para cargar imágenes directamente en texturas OpenGL (que necesariamente llama a funciones OpenGL). – Danvil

0

Otra opción es OpenCV.

Hace mucho más que solo carga de texturas, pero las probabilidades son buenas también encontrará el uso de sus otras características.

+0

¿OpenCV proporciona funciones para proporcionar datos de imagen en un formato listo para alimentar a una textura OpenGL? – thecoshman

Cuestiones relacionadas