2013-02-23 121 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