【问题标题】:Strange color shift after loading a GL_RGB texture加载 GL_RGB 纹理后奇怪的颜色偏移
【发布时间】:2012-06-07 02:32:53
【问题描述】:

这是一个原始的 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 位
  • Visual Studio 2010

【问题讨论】:

  • 您是否设置了包对齐方式?默认是 4 个字节,所以 rgba 数组可以,但不能与 rgb 数组一起使用。
  • 没有。 glPixelStorei 的哪些参数可以解决这个问题?
  • See here -- glPixelStorei(GL_UNPACK_ALIGNMENT, 1) 应该修复它。
  • 非常感谢!如果您愿意,请添加官方答案。我很乐意为你投票。
  • @KaySarraute:为什么不接受答案?

标签: opengl texture2d


【解决方案1】:

See here -- glPixelStorei(GL_UNPACK_ALIGNMENT, 1) 应该修复它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多