【发布时间】: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:为什么不接受答案?