【问题标题】:OpenGL handling float color saturation ("color overflow")?OpenGL 处理浮点颜色饱和度(“颜色溢出”)?
【发布时间】:2020-09-06 11:49:09
【问题描述】:

我正在使用 openGL 进行科学可视化,我尝试创建一个“彩色雾”来说明多维领域。我希望颜色的色调代表场的方向,颜色的亮度对应场的强度

我使用GL_BLENDglBlendFunc(GL_ONE, GL_ONE) 来实现我创建的表面颜色的叠加混合。问题是:在某些地方颜色会饱和。例如:
(1, 0, 0) + (1, 0, 0) = (2, 0, 0),当它被渲染时它就变成了(1 , 0, 0) (即“溢出”刚刚被切断)。这不是我想要的处理方式。我想通过保留色调和亮度来处理溢出,即

(2, 0, 0) 应该翻译成(1, 0.5, 0.5) (即较浅的红色,亮度是“纯”的两倍的红色红色)。

有没有什么方法可以用 OpenGL 实现这个(或类似的东西)?

【问题讨论】:

    标签: opengl transparency blending color-blending saturation-arithmetic


    【解决方案1】:

    如果目标缓冲区的图像格式具有标准化格式(例如 UNSIGNED_BYTE),片段着色器的输出将被限制为 [0, 1]。如果您使用浮点格式,则不会限制输出。请参阅BlendingImage Format

    通过混合不支持的函数混合目标缓冲区和颜色是很棘手的。一种可能的解决方案是使用着色器程序并使用扩展名EXT_shader_framebuffer_fetch

    此外,扩展 KHR_blend_equation_advanced 增加了许多“高级”混合方程,例如 HSL_HUE_KHRHSL_SATURATION_KHRHSL_COLOR_KHRHSL_LUMINOSITY_KHR

    【讨论】:

      猜你喜欢
      • 2016-09-25
      • 2011-05-17
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2012-10-30
      • 1970-01-01
      • 2015-07-11
      相关资源
      最近更新 更多