6

这是一个原始的 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);

在此处输入图像描述

加载 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);

在此处输入图像描述

第一个和第二个屏幕截图之间的代码差异只是 glTexImage2D 的这两个参数。

我究竟做错了什么?

环境

  • ATI Radeon HD5450,OpenGL 4.2
  • Windows 7、64 位
  • 视觉工作室 2010
4

1 回答 1

11

见这里-glPixelStorei(GL_UNPACK_ALIGNMENT, 1)应该修复它。

于 2012-06-06T18:32:53.203 回答