我已经编写了一个例程来读取BMP文件中的所有像素值到一个数组,我想将其提供给openGL的glTexImage2D以将其转换为纹理。这样做我意识到BMP文件中像素的实际格式是BGR而不是RGB,所以我的数组包含蓝色,绿色,红色。结果,我的最终纹理与原始位图相比,交换了蓝色和红色通道。
这就是我所说的:
glTexImage2D(GL_TEXTURE_2D, 0, 3, imgdata->width, imgdata->height, 0, GL_RGB, GL_UNSIGNED_BYTE, imgdata->pixdata);
这种情况的任何解决方法/错误的论点我正在通过?我现在才能找到的解决方案是使用循环手动交换数组中的RB值。
答案 0 :(得分:3)
为什么不将glTexImage2D的格式更改为GL_BGR。
答案 1 :(得分:1)
我设置GR_BGR并将其标记为未声明的标识符
然后你没有使用proper library for getting at OpenGL。 OpenGL的系统提供的头文件可能包含也可能不包含最新的函数和枚举器。因此,您需要使用其中一个库来获取OpenGL。您应该使用GL/gl.h
的而不是。
一旦你正确访问OpenGL,剩下的就很简单了。使用GL_RGB
作为pixel transfer format。