7 c++ windows opengl bitmap devil
我想一个位图加载到一个OpenGL纹理,并显示到屏幕上,但是当我这样做,红色和蓝色值似乎切换(如:蓝色图像显示为橙色,绿色的图像保持不变,等等. ).这个问题只在加载位图时才存在,我可以加载.pngs相对无错误.
这是我用来加载位图和设置纹理的代码.我正在使用DevIl,但我不确定它是多么相关,因为当我使用不同的系统时存在问题(我不太记得什么,它是window.h中的一个函数,我相信):
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());
Run Code Online (Sandbox Code Playgroud)
ilInit()并且glEnable(GL_TEXTURE_2D)在程序的早期都被调用,以及其他不太相关的功能.任何帮助找到(并希望修复)问题的原因将非常感激.
Dav*_*Yaw 10
你的RGB和BGR倒退了.
glTexImage2D(GL_TEXTURE_2D, 0, 3, ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), \
0, GL_RGB, GL_UNSIGNED_BYTE, ilGetData());
Run Code Online (Sandbox Code Playgroud)
有没有GL_BGR你可以在第二行指定,而不是GL_RGB?那应该解决它.
PNG导致图像翻转的原因是因为BMP的存储方式:BMP存储在底部,文件中的第一个像素是图像的底行.