加载GL_RGB纹理后出现奇怪的颜色偏移

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

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

1
你设置了包对齐吗?默认值为4字节,所以rgba数组将正常工作,但它不能与rgb数组一起使用。 - Stefan Hanke
没有。哪些glPixelStorei参数可以解决这个问题? - Kay Sarraute
3
glPixelStorei(GL_UNPACK_ALIGNMENT, 1) 可以解决这个问题。 - Stefan Hanke
非常感谢!如果您愿意,可以添加官方答案,我很乐意为您投票。 - Kay Sarraute
1个回答

11

在这里查看 -- 用glPixelStorei(GL_UNPACK_ALIGNMENT, 1)应该可以解决这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接