OpenGL 如何处理浮点颜色饱和度("颜色溢出")?

问题描述 投票:1回答:1

我正在使用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个回答
1
投票

如果目标缓冲区的图像格式为归一化格式(如unsigned_byte),则输出到片段着色器的结果将被钳制为[0,1]。如果你使用的是浮点格式,那么输出就不会被夹紧。请看 搅拌图像格式.

通过一个不支持混合的函数来混合目标缓冲区和颜色是很棘手的。一个可能的解决方案是使用shader程序和使用扩展 EXT_shader_framebuffer_fetch(获取).

此外,延长 KHR_blend_equation_advanced(高级) 增加了许多 "高级 "混合方程,如 HSL_HUE_KHR, HSL_SATURATION_KHR, HSL_COLOR_KHRHSL_LUMINOSITY_KHR.

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.