似乎它们主要是在这里提高饱和度,所以这就是您需要在片段着色器中做的事情。
要提高饱和度,您需要将数据从 RVB 颜色空间转移到 HSL(色相饱和亮度)空间。
然后你需要做:
hslColor = vec3(hslCOlor.x, hslColor.y * **boost**, hslCOlor.z);
当然,要做到这一点,您实际上需要进入正确的色彩空间。这不是真正的 openGL 问题,我发现这个网站进行了转换:
https://www.rapidtables.com/convert/color/rgb-to-hsl.html
他们还给出了转换公式:
R' = R
G' = G
B' = B
Cmax = max(R', G', B')
Cmin = min(R', G', B')
Δ = Cmax - Cmin
L = (Cmax + Cmin) / 2
这样您就可以从 RVB 获得 HSL。完成饱和度提升后,您需要将色彩带回 RVB 色彩空间
好消息是同一个网站似乎提供了相同的功能!
https://www.rapidtables.com/convert/color/hsl-to-rgb.html
当 0 ≤ H
C = (1 - |2L - 1|) × S
X = C × (1 - |(H / 60°) mod 2 - 1|)
m = L - C/2
(R,G,B) = ((R'+m), (G'+m),(B'+m))
我从他们的公式中删除了 255,因为通常您在 GLSL 中处理 [0,1]。
有了这个,您应该能够对颜色进行各种转换,以类似于 photoshop 的简单工具的方式来操作它们。
编辑 应该注意的是,我主要谈论的是提高饱和度,但在您的示例中,他们可能正在做的事情要复杂得多。但是,如果您正在使用颜色来编辑照片,那么在 HSL 中工作仍然是一件好事。