2013-07-05 3 views
3

Я использую CImg в среде OpenGL. Когда я пытаюсь добавить текстуру, каждый цвет, кажется, выделяется в отдельную плитку внутри текстуры. Например, при попытке использовать текстуру, которая выглядит следующим образом:Разделение цвета текстуры OpenGL

он выходит в моей программе, глядя, как это:

Текстура, что я загружаю представляет собой файл 512x512 .bmp, сохраненный в Gimp с глубиной цвета 24 бит, RBG. Я пробовал некоторые другие форматы, которые позволяет Gimp, но они просто вызывают ошибки с CImg.

Это, как я загрузить текстуру:

glBindTexture(GL_TEXTURE_2D, 13); 
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 

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_MAG_FILTER, GL_LINEAR); 
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); 

CImg<unsigned char> src("MilkyWay.bmp"); 
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, src.width(), src.height(), 
    0, GL_RGB, GL_UNSIGNED_BYTE, src); 

и это, как отобразить текстуру:

glEnable (GL_TEXTURE_2D); 
glBindTexture (GL_TEXTURE_2D, 13); 
glBegin (GL_QUADS);   
    glTexCoord2f (0.0, 1.0); 
    glVertex3f (-120.0, 120.0, 0.0); 
    glTexCoord2f (1.0, 1.0); 
    glVertex3f (120.0, 120.0, 0.0); 
    glTexCoord2f (1.0, 0.0); 
    glVertex3f (120.0, -120.0, 0.0); 
    glTexCoord2f (0.0, 0.0); 
    glVertex3f (-120.0, -120.0, 0.0); 
glEnd(); 

ответ

1

CImg хранит каналы без чередования (или 'плоскую'), но GL ожидает наоборот. Результат - то, что вы видите.

Вы можете изменить данные (или выполнить CImg для вас), но поскольку каналы также чередуются в исходном формате, библиотека изображений де-чередует их только для некоторого промежуточного шага для повторного чередования до передачи в ГЛ было бы неэффективно. Вместо этого я рекомендовал бы использовать другой способ загрузки ваших данных изображения, чтобы он был непосредственно применим.

Существует много библиотек, которые сделают это, хотя BMP - это довольно простой формат для чтения напрямую.

+0

Спасибо! Есть ли библиотеки для чтения изображений, которые вы бы порекомендовали? – Vicker

+1

Я бы хотел обновить, если кто-нибудь еще прочтет это. Я загрузил ПОЧТУ из http://www.lonesock.net/soil.html, и это сработало чудеса. Спасибо за вашу помощь, JasonD! – Vicker

Смежные вопросы