【问题标题】:OpenGL texture color issueOpenGL纹理颜色问题
【发布时间】:2011-09-05 15:54:25
【问题描述】:

我正在加载原始纹理(带有 alpha 通道)并在 openGL 中显示它,一切都很好,纹理也显示出来了,但是颜色比原始的颜色要暗一点。我已经尝试关闭光照、混合和抖动,但这没有帮助。

我正在使用 mac osx。

示例图片

http://postimage.org/image/2wi1x5jic/

这里是openGL纹理加载源码:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA , width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, &bytes[0]);

编辑:

这很奇怪,我用了http://forums.tigsource.com/index.php?topic=9560.0的例子 并收到同样的故障......所以问题不是我的代码,也许是驱动程序选项?嗯……

解决方案:

感谢@datenwolf,图像是使用 sRrgb 颜色配置文件保存的。一旦我将其删除并转换为 RGB,问题就解决了。

【问题讨论】:

  • 您如何查看原始图像?
  • 我正在使用 Gimp,原始图像格式

标签: c++ opengl 3d textures


【解决方案1】:

也许您将 GL_MODULATE 设置为纹理环境,并且顶点颜色不是白色。尝试将纹理环境设置为 GL_REPLACE。

glBindTexture(GL_TEXTURE_2D, your_texture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

编辑

另一个问题可能是嵌入图像的颜色配置文件。图像查看器可以使用此颜色配置文件来实施颜色管理,调整显示器颜色配置文件的颜色。 OpenGL 原样不进行颜色管理;有一个扩展,即帧缓冲区和纹理是 sRGB,这是颜色管理的最小公分母。但是您仍然需要将输入图像传输到 sRGB 颜色空间。

我准备了一篇很长的文章来深入解释如何使用 OpenGL 进行颜色管理。但它远未完成。

【讨论】:

  • 我使用的是从 Gimp 导出的原始图像。它是 rgba 格式的,我认为它没有任何嵌入信息。
  • @lameDay:不一定是嵌入颜色配置文件的问题。如果 GIMP 只是在 sRGB 颜色空间中写入颜色而不是对其进行线性化,那么您需要将这些纹理加载为 sRGB 纹理。
  • 你能给出代码示例吗?我怎样才能在openGL中做到这一点?我试图把 GL_SRGB 而不是 GL_RGBA 但它显示白屏...
  • @lameDay: 而​​不是 which GL_RGBA? internal format(第三个参数)还是pixel format(第七个参数)?我猜你改变了像素格式。此外,请使用调整大小的内部格式,而不是像 GL_RGBA 这样的未调整大小的格式。
  • 感谢@datenwolf,图像是使用 sRrgb 颜色配置文件保存的。一旦我将其删除并转换为 RGB,问题就解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
相关资源
最近更新 更多