Странный сдвиг цвета после загрузки текстуры GL_RGB

Вот примитивная текстура 5x2, определенная в форматах RGB и RGBA.

//                       1               2               3                     4               5
unsigned char rgb[]  = { 0, 0, 0,        0, 0, 0,        200, 200, 200,        0, 0, 0,        200, 200, 200,
                         0, 0, 0,        0, 0, 0,        200, 200, 200,        0, 0, 0,        200, 200, 200,       };
unsigned char rgba[] = { 0, 0, 0, 255,   0, 0, 0, 255,   200, 200, 200, 255,   0, 0, 0, 255,   200, 200, 200, 255,
                         0, 0, 0, 255,   0, 0, 0, 255,   200, 200, 200, 255,   0, 0, 0, 255,   200, 200, 200, 255,  };

Загрузка версии RGBA работает так, как ожидалось:

glTexImage2D(GL_TEXTURE_2D,
             0,       // mipmap level
             GL_RGB,  // dest format
             5,       // width
             2,       // height
             0,       // deprecated
             GL_RGBA, // source format
             GL_UNSIGNED_BYTE,
             rgba);

enter image description here

Загрузка текстуры RGB приводит к странному смещению цвета:

glTexImage2D(GL_TEXTURE_2D,
             0,       // mipmap level
             GL_RGB,  // dest format
             5,       // width
             2,       // height
             0,       // deprecated
             GL_RGB,  // source format
             GL_UNSIGNED_BYTE,
             rgb);

enter image description here

Разница в коде между первым и вторым снимками экрана состоит только в этих двух аргументах для glTexImage2D.

Что я делаю не так?

Окружающая среда

  • ATI Radeon HD5450, OpenGL 4.2
  • Windows 7, 64-разрядная версия
  • Visual Studio 2010
5
задан Bart 6 June 2012 в 16:59
поделиться