在OpenGl中着色非常暗的纹理

时间:2011-01-27 22:07:06

标签: opengl textures

我相信当你在OpenGL中为纹理对象应用颜色时,它会将glColor的颜色与纹理数据的颜色相乘,以确定实际绘制的颜色。这对于浅色纹理来说都很好,但它对于尝试着色较暗的纹理是一个问题,因为如果你有一个黑色纹理并试着将它着色为红色,那么它仍然会变成相同的黑色。在设置glColor时,有没有人知道任何黑客或技术可以显着减轻暗纹理的颜色?

3 个答案:

答案 0 :(得分:1)

您描述的comportment是基本的GL_MODULATE行为,这是一个简单的简单乘法。

根据您所使用的平台或GL版本,您可以考虑:

  • 使用着色器,这将允许您对纹理图像执行几乎任何操作

  • 使用其他更完整的TexEnv模式替换GL_MODULATE;我不确定哪种适合你,但有足够的创造力one of those可能适合你。我想我记得TexEnv周围有很多扩展,也可能有用。

答案 1 :(得分:0)

首先照亮纹理,然后照常着色。

为了使纹理变亮,有两种基本技术:

  • 添加剂增白:为每个纹素添加一个常量值。
  • 乘法增亮:将每个纹素乘以大于1的值。将所有内容乘以1.1,亮度为+ 10%。

答案 2 :(得分:0)

Gamma校正可能会在这里发挥作用。用红色照明的黑色仍然是黑色的,这是预期的。然而,如果“黑暗”(非黑色)的东西仍然显得“大多是黑色”,那么这表明出现了问题。

图像(包括纹理)通常保存为sRGB,因为大多数人都会以这种方式设置显示器,因此在屏幕上显示时,这对大多数人来说效果最佳。不幸的是,如果你用数值计算数字就不再适用了!

如果支持EXT_texture_sRGB(版本2.1中的核心),则应在加载纹理时尝试使用相应的“S”常量。否则,您也可以在着色器中手动进行数学运算。

=====> useful gamma literature