答案 0 :(得分:2)
似乎它们在这里主要是提高饱和度,所以这就是您在片段着色器中需要执行的操作。
要提高饱和度,您需要将数据从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 <360时,0≤S≤1和0≤L≤1:
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中工作仍然是一件好事。