OpenGL处理​​浮动颜色饱和度(“颜色溢出”)?

时间:2020-05-20 07:38:10

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

我正在使用openGL进行科学的可视化处理,我试图从根本上创建一个“彩色雾”来说明多维字段。我希望颜色的色相表示字段的方向,颜色的亮度与字段的强度相对应。

我将GL_BLENDglBlendFunc(GL_ONE, GL_ONE)结合使用来实现我创建的表面颜色的加性混合。问题是:在某些地方颜色会饱和。例如:
(1,0,0)+(1,0,0)=(2,0,0),渲染后,它就变成(1,0,0)< / em>(即“溢出”被切掉)。这不是我希望处理的方式。我想通过保留色调和亮度来解决溢出问题,即

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

有什么办法可以通过OpenGL实现这一目标(或类似的目标)?

1 个答案:

答案 0 :(得分:1)

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

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

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