2014-12-21 40 views
1

我有一系列不同顏色的矩形,我試圖給其中的一個添加紋理。但是,當我將紋理應用到給定的矩形時,它只會變黑。下面是我用來加載紋理的函數。C++添加一個紋理到GL_QUAD,它出現黑色

GLuint GLWidget:: LoadTexture(const char * pic, int width, int height){ 

GLuint Texture; 
BYTE * data; 
FILE * picfile; 

picfile = fopen(pic, "rb"); 
if (picfile == NULL) 
    return 0; 

data = (BYTE *)malloc(width * height * 3); 

fread(data, width * height, 3, picfile); 
fclose(picfile); 

glGenTextures(1, &Texture); 
glBindTexture(GL_TEXTURE_2D, Texture); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 

glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, width, height, 0, GL_RGB8, GL_UNSIGNED_BYTE, data); 

return Texture; 
} 

在另一個函數,其中的GL_QUADS被吸引,然後我有...

GLuint myTex = LoadTexture("texture.bmp", 500, 500); 

    glEnable(GL_TEXTURE_2D); 
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 

    glBindTexture(GL_TEXTURE_2D, myTex); 

    glBegin(GL_QUADS); 

    glTexCoord2f(1, 1); glVertex3f(42, 10, 42); 
    glTexCoord2f(1, 0); glVertex3f(42, 10, -42); 
    glTexCoord2f(0, 0); glVertex3f(-42,10,-42); 
    glTexCoord2f(0, 1); glVertex3f(-42,10, 42); 

    glEnd(); 

如果有人可以讓我知道我錯了,這將是巨大的,謝謝!

+1

它作爲一個建議的標籤,看到我使用Qt似乎是合適的。這也意味着@derhass能夠給我指出我使用獨特的Qt函數的方向,否則我不知道它會使用。 – user3151321

回答

2

此調用

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, width, height, 0, GL_RGB8, GL_UNSIGNED_BYTE, data); 

是無效的。 GL_RGB8是一個有效的internalFormat,但它不是格式的有效枚舉。使用GL_RGB, GL_UNSIGNED_BYTE作爲格式和類型,如果您的客戶端數據是3個通道,每個通道8個但無符號的int數據。

的另一件事是

LoadTexture("texture.bmp", 500, 500); 

這表明,你正在處理BMP文件,但您的裝載機只有具有完全的原始圖像數據的交易。

+0

好的,謝謝。有一個特定的加載程序,我可以用於BMP文件? – user3151321

+0

@ user3151321:由於您使用「qt」標記了問題,因此您可以使用qt的集成圖像加載功能,該功能可以通過'QImage'類獲得。 – derhass