【问题标题】:Colorozing very dark textures in OpenGl在 OpenGL 中着色非常暗的纹理
【发布时间】:2011-01-27 22:07:06
【问题描述】:

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

【问题讨论】:

    标签: opengl textures


    【解决方案1】:

    您描述的行为是基本的 GL_MODULATE 行为,即简单的乘法。

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      • 添加增亮:为每个纹素添加一个常数值。
      • 乘法增亮:将每个纹素乘以大于 1 的值。例如将所有内容乘以 1.1 即可获得 +10% 的亮度。

      【讨论】:

        【解决方案3】:

        伽玛校正可能在这里发挥作用。用红色点亮黑色仍然是黑色,这是预期的。但是,如果“较暗”(非黑色)的东西仍然显示为“大部分是黑色的”,那么这表明出现了问题。

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

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

        =====> useful gamma literature

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-07
          • 1970-01-01
          • 1970-01-01
          • 2023-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多