Текстура в градациях серого отображается в цвете в 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 (по умолчанию) после создания текстуры.