0

我编写了一个例程,将 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 值。

4

2 回答 2

3

为什么不将glTexImage2D的格式更改为 GL_BGR。

于 2013-02-23T17:28:05.683 回答
1

我设置了 GR_BGR 并将其标记为未声明的标识符

那么你没有使用适当的库来获取 OpenGL。OpenGL 的系统提供的头文件可能包含也可能不包含最新的函数和枚举器。因此,您需要使用其中一个库来获取 OpenGL。您应该使用这些不是GL/gl.h.

一旦你正确地访问了 OpenGL,剩下的就很简单了。用作GL_RGB您的像素传输格式

于 2013-02-23T23:45:05.253 回答