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

标签 opengl texture2d

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

最佳答案

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

关于opengl - 加载 GL_RGB 纹理后出现奇怪的颜色偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10918684/

相关文章:

c++ - OpenGL 加载将最后加载的纹理绑定(bind)到所有 textureID

c++ - OpenGL 3.2 : Cache compiled shaders?

c++ - “glGetTexLevelParameter”未在此范围内声明

c# - 如何通过脚本使 Texture2D 可读

java - 纹理在 java3d 中无法正确显示

c# - 如何在运行时使用 .bmp 文件并在 Unity 中创建纹理?

android - Android 中的 GLES20.glTexImage2d() 和 GLUtils.texImage2d() 有什么区别?

.net - 我可以利用 GPU 从 .NET 进行 AES 加密吗?如果是这样,如何?

opengl - 渲染到 FBO + glReadPixels 全黑

c++ - OpenGL 二维矩形未被渲染