Estoy tratando de cargar un mapa de bits en una textura OpenGL y mostrarlo en la pantalla, pero cuando lo hago, los valores rojo y azul parecen cambiar (por ejemplo, una imagen azul aparece naranja, verde las imágenes permanecen sin cambios, etc.). Este problema solo existe al cargar bitmaps, puedo cargar .pngs relativamente libre de errores.Cargando un BMP en una texturas OpenGL cambia los colores rojo y azul. (C++/Windows)
Este es el código que estoy usando para cargar los mapas de bits y establecer las texturas. Estoy usando DevIl, pero no estoy seguro de cuán relevante es, ya que el problema existía cuando usaba un sistema diferente (no recuerdo exactamente qué, era una función en window.h, creo):
ilOriginFunc(IL_ORIGIN_LOWER_LEFT);
ilEnable(IL_ORIGIN_SET);
ILuint image;
ilGenImages(1, &image);
ilBindImage(image);
ilLoad(IL_BMP, "Data/NeHe.bmp"); // Incidentally, loading a png, although it fixes the problem,
// rotates the image 180 degrees. Not sure if that's important or not,
// But it's why I added the first line of code
glGenTextures(3, &_texture[0]);
glBindTexture(GL_TEXTURE_2D, _texture[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, 3, ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), \
0, GL_RGB, GL_UNSIGNED_BYTE, ilGetData());
ilInit()
y glEnable(GL_TEXTURE_2D)
sean llamados anteriormente en el programa, entre otras funciones menos relevantes. Cualquier ayuda para encontrar la causa de (y con suerte solucionar) el problema sería muy apreciada.
Gracias. Intenté GL_BGR, pero recibo un error que dice que no existe. Tampoco entiendo por qué un mapa de bits se almacena con datos BGR en primer lugar, ¿verdad? –
@ Keand64: los archivos BMP, o para ser precisos, de hecho están almacenados en orden BGR. De hecho, en los sistemas modernos, también los bitplanes frambuffer están en orden BGR (A), por lo que el suministro de texturas en formato BGR suele ser más rápido que el formato RGB. GL_BGR es un token de las versiones de OpenGL> 1.1, sin embargo, el SDK de la plataforma de Windows se envía solo con encabezados para OpenGL-1.1. Se debe acceder a cualquier elemento más allá a través de las extensiones. Simplemente obtenga GLEW http://glew.sourceforge.net o GLee, use los encabezados de los que ya se han hecho. – datenwolf
También puede intentar "#include", pero tal vez necesite obtener una versión reciente de glext.h desde http://www.opengl.org/registry/api/glext.h –
Alink