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
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!
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!
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
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.
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
No es un ejemplo muy minimalista un archivo de carga de un PNG en OpenGL aquí:
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.
¿OpenCV proporciona funciones para proporcionar datos de imagen en un formato listo para alimentar a una textura OpenGL? – thecoshman
- 1. Cargando texturas en una aplicación para Android OpenGL ES
- 2. Asignación de texturas OpenGL
- 3. Cargando un BMP en una texturas OpenGL cambia los colores rojo y azul. (C++/Windows)
- 4. OpenGL - máscara con múltiples texturas
- 5. Asignación de texturas C++ OpenGL
- 6. cargando png animado
- 7. Cómo cargar texturas JPG/PNG en una aplicación SDL/OpenGL bajo OSX
- 8. CLOD texturas amplias del planeta en OpenGL
- 9. Cargando textura para OpenGL con OpenCV
- 10. Textura OpenGL Cargando
- 11. Cargando archivos PNG con CImg
- 12. ¿Se deben voltear las texturas OpenGL?
- 13. texturas OpenGL con contextos de visualización múltiples
- 14. Carga de texturas OpenGL: UNSIGNED_BYTE vs UNSIGNED_INT_8_8_8_8
- 15. Cargando PNG en problemas de rendimiento OpenGL - Java y JOGL mucho más lento que C# & Tao.OpenGL
- 16. Cómo cargar texturas en OpenGL ES de manera eficiente
- 17. OpenGL ES renderizar para texturizar, luego dibujar texturas
- 18. Cargando modelo 3D en la escena OpenGL
- 19. textura de JuicyPixels cargando en Haskell OpenGL?
- 20. Perder Texturas OpenGL en Android después de un currículum
- 21. Android opengl texturas blancas en la variante Samsung Galaxy
- 22. Texturas de punto flotante en OpenGL ES 2.0
- 23. Cómo obtener datos de texturas usando textureID en openGL
- 24. ¿Cómo puedo hacer que las texturas sean transparentes en OpenGL?
- 25. Cargando un png a imgur usando javascript
- 26. Android Opengl-es cargando un no poder de 2 textura
- 27. OpenGL ES 2.0 PNG canal alfa
- 28. ¿Puede OpenGL ES renderizar texturas de dimensiones no base 2?
- 29. mapeo perfecto de texturas de píxeles con OpenGL
- 30. OpenGL 2 texturas formatos internos GL_RGB8I, GL_RGB32UI, etc.
¿Muestra de código para la carga de GDI +? – Macke
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
¿Por qué preocuparse acerca de cómo cargar imágenes, cuando hay bibliotecas alrededor que lo hacen por usted? – Danvil