2013-02-23 39 views
0

我已经写了一个例程,以读取从BMP文件内的所有像素值到一个数组,我想喂给openGL的glTexImage2D把它变成一个纹理。这样做,我意识到BMP文件内像素的实际格式是BGR而不是RGB,所以我的数组包含蓝色,绿色和红色。因此,与最初的位图相比,我的最终纹理交换了蓝色和红色通道。阅读BMP的BGR值,传递给glTexImage2D

这是我怎么称呼它:

glTexImage2D(GL_TEXTURE_2D, 0, 3, imgdata->width, imgdata->height, 0, GL_RGB, GL_UNSIGNED_BYTE, imgdata->pixdata); 

任何解决方法,我通过这个局面/错误的参数?我现在唯一能找到的解决方案是使用循环手动交换数组内的RB值。

回答

3

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

+0

我在OpenGL的文档中看不到这样的格式 – Tsaras 2013-02-23 18:28:27

+0

指定像素数据的格式。 以下符号值被接受: GL_RED, GL_RG, GL_RGB, GL_BGR, GL_RGBA,和 GL_BGRA。 – 2013-02-23 18:29:02

+0

我在你提供的链接中看到它,但是当我从红色书中读取时,它不在列表中。事实上,我设置了GR_BGR,它被标记为未声明的标识符 – Tsaras 2013-02-23 18:30:03

1

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

然后你不使用proper library for getting at OpenGL。 OpenGL的系统提供的头文件可能包含或不包含最新的函数和枚举器。相反,您需要使用其中一个库来获取OpenGL。您应该使用这些而不是GL/gl.h

一旦你正确访问OpenGL,其余的都很简单。使用GL_RGB作为您的pixel transfer format

+0

你能帮我理解这些加载库的功能吗?它们只是调用openGL核心的更高层次的接口,它们是否增加了功能,哪些是最新的? – Tsaras 2013-02-24 14:35:05