Текстура в градациях серого отображается в цвете в OpenGL

Я пишу заставку Какао, простая сцена opengl, ничего особенного. У меня есть куча RGB GIF с шаблонами, и все они отлично работают, кроме одного.

То, что я вижу в предварительном просмотре заставки (рендеринг одного квадра с текстурой на нем):

Предварительный просмотр заставки

Сама текстура (масштабируется соответственно):

Некоторый код:

Загрузка текста:

NSBitmapImageRep *bitmap = [NSBitmapImageRep imageRepWithData:[texImg TIFFRepresentation]];
if(bitmap) {
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, (GLsizei)[texImg size].width, 
                 (GLsizei)[texImg size].height, 0, GL_RGB, GL_UNSIGNED_BYTE,
                 [bitmap bitmapData]) ;

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}

GL init:

glEnable(GL_TEXTURE_2D);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);

1 ответ

Решение

Похоже, это может быть проблема с пакетом пикселей.

Можете ли вы попробовать установить эту линию перед созданием текстуры?

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

Вы можете прочитать о том, что это делает здесь:

http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml

а также

http://www.opengl.org/archives/resources/features/KilgardTechniques/oglpitfall/ (см. раздел 8)

Но в основном по умолчанию opengl ожидает, что строки пикселей будут кратны 4 байтам, что не всегда точно при использовании 1/2/3 байт на пиксель.

Рекомендуем также установить его обратно в 4 (по умолчанию) после создания текстуры.

Другие вопросы по тегам