OpenGL纹理颜色问题

时间:2011-09-05 15:54:26

标签: c++ opengl 3d textures

我正在加载原始纹理(使用alpha通道)并在openGL中显示它一切都很好并且纹理显示,但颜色比原始颜色稍暗。我已经尝试过照明,混合和抖动,但这没有帮助。

我正在使用mac osx。

示例图片

Sample image 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,问题就解决了。

1 个答案:

答案 0 :(得分:2)

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

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

修改

另一个问题可能是嵌入图像中的颜色配置文件。图像查看器可以使用此颜色配置文件来实现颜色管理,调整显示器颜色配置文件的颜色。 OpenGL as-it-is不进行色彩管理;有一个扩展,帧缓冲和纹理是sRGB,这是颜色管理的最小共同点。但是,您仍然需要将输入图像传输到sRGB色彩空间。

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