2013-06-21 2 views
0

Я занимаюсь работой с пикселями в OpenGL, и все шло хорошо, пока мне не пришлось загружать PNG. Я нашел вещь под названием «Дьявол» и последовал примеру, который я нашел. Он что-то показывает, но это всего лишь случайная радуга. Насколько я могу судить, я делаю это правильно; Я выводю данные в текстовый файл, чтобы проверить его. Я пробовал некоторые другие библиотеки, но их создание немного превосходит мои возможности. Вот мои настройки:DevIL PNG формат для отображения в OpenGL

((In global scope)) 
unsigned char pixels[160000*3]; 
ILubyte * bytes ; 

((Main)) 
ilInit(); 

ilLoadImage("test.png") ; 

size = ilGetInteger(IL_IMAGE_SIZE_OF_DATA) ; 

bytes = ilGetData() ; 

А вот мой рисунок дня:

//Color the screen all pretty 
for(int i=0;i<160000*3;) 
{ 
    pixels[i] = a; 
    i++; 
    pixels[i] = b; 
    i++; 
    pixels[i] = c; 
    i++; 
} 

//Break the png 
for(int i = 0 ; i < size;) 
{ 
    if(bytes[i+3] != 255) 
    { i+=4; 
      continue; } 

    pixels[i] = bytes[i]; 
    i++; 
    pixels[i] = bytes[i]; 
    i++; 
    pixels[i] = bytes[i]; 
    i++; 
    i++; 
} 

glDrawPixels(
    400, 
    300, 
    GL_RGB, 
    GL_UNSIGNED_BYTE, 
    pixels 
    ); 

Я знаю, что выравнивание неправильно; Я исправлю это позже. Проблема в том, что цвета полностью не правильные

P.S. Я знаю, что вы должны использовать текстурированные квадраты

ответ

1

PNG - это сжатый формат. Кажется, что ilGetData возвращает указатель на сжатые данные. Чтобы получить декодированное изображение, используйте ilCopyPixels.

+0

Спасибо, цвет правильный, но я не могу показаться, чтобы альфа отображалась правильно, хотя я убедился, что все было RGBA. Кроме того, есть ли способ конвертировать данные, чтобы я мог отображать его с помощью цикла for? – user2345349

+0

Nevermind, получил его работу, просто упустил некоторые детали, спасибо :) – user2345349