【问题标题】:Altering brigthness on OpenGL texture改变 OpenGL 纹理的亮度
【发布时间】:2009-08-26 00:15:22
【问题描述】:

我想增加 OpenGL 渲染中使用的纹理的亮度。比如让它变成鲜红色或白色。这是一个 2D 渲染环境,其中每个精灵都作为纹理映射到 OpenGL 多边形。 我对处理数据知之甚少,而且我的引擎使用纹理缓存,因此更改整个表面会影响使用纹理的所有内容。 我可以通过使用“蒙版”并覆盖它来模拟效果,从而使精灵具有纯色,但这会占用内存。 是否有其他解决方案?

【问题讨论】:

    标签: opengl textures


    【解决方案1】:

    如果您的需求负担得起,您总是可以编写一个非常简单的 GLSL 片段着色器来执行此操作。它实际上是一个班轮。
    比如:

    uniform sampler2d tex;
    void main()
    {
        gl_FragColor = texture2d(tex, gl_TexCoord[0]) + gl_Color;
    }
    

    【讨论】:

    • +1 举个例子。无论如何,您可能应该改用着色器而不是固定的管道,它更加灵活
    【解决方案2】:

    也许是GL_ADD 而不是 GL_MODULATE?

    【讨论】:

      【解决方案3】:

      使用GL_MODULATE 将纹理颜色乘以当前颜色。
      请参阅this page 中的纹理教程。

      【讨论】:

      • 不太好用,而且好像是默认的,所以我已经在用了。当使用精灵并设置颜色 (1,0,0)(全红色)时,它会从精灵中移除绿色和蓝色。我想添加实际的红色而不是删除其他两个组件。
      猜你喜欢
      • 1970-01-01
      • 2015-07-06
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多