OpenGL GL_BGR 不适用于纹理内部格式

标签 opengl colors textures

根据我在 OpenGL 文档中阅读的内容,OpenGL 更喜欢 BGR 格式而不是 RGB。但是,当将纹理的内部格式设置为 BGR 时,渲染时纹理全白。当内部格式设置为 RGB 或 RGBA 时,它可以正常显示。源格式一开始是 BGR(直接从 DIB 加载)。

 glBindTexture(GL_TEXTURE_2D, id);
 glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, nClamp);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, nClamp);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, nMagFilter);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, nMinFilter);
 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

下一行是问题所在...将内部格式设置为 GL_BGR 会使所有内容变为白色...更改为 GL_RGB 会使其正确呈现

 glTexImage2D(GL_TEXTURE_2D, 0, GL_BGR, pTex->nWidth, pTex->nHeight, 0, GL_BGR, GL_UNSIGNED_BYTE, pTex->pBuffer);

最佳答案

来自glTexImage2D man page , GL_BGR 不是内部格式,只是一种格式。

您应该检查 GL 错误,因为那样会发现此错误。您读到的关于“OpenGL 更喜欢 BGR”的内容是错误的。

关于OpenGL GL_BGR 不适用于纹理内部格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4745264/

相关文章:

javascript - 使用 WebGL 显示文本

OpenGL - GlVertex 相对/绝对位置

c++ - SFML OpenGL 绘图文本

Java颜色检测

algorithm - CMYK + CMYK = ?三色/2=?

c# - Bitmap Region is already locked 异常

c++ - 使用 SDL2 操作硬件纹理

java - OGL ES 2.0 平面纹理

c++ - OpenGL 中一致的手绘线

java - 我怎样才能不将纹理应用到模型的一部分?