前言
“色彩空间”一词源于西方的“Color Space”,又称作“色域”,色彩学中,人们建立了多种色彩模型,以一维、二维、三维甚至四维空间坐标来表示某一色彩,这种坐标系统所能定义的色彩范围即色彩空间。
简言之,色彩空间就是用来描述颜色的的坐标空间。而在GLSL里面,片元着色器最终接受的颜色属于RGBA模型。
 常用的颜色模型
 RGB(A)颜色模型
该模型的原理是光学三原色(红、绿、蓝)进行不同比例的混合可以得到其他任何颜色。
R:代表红色分量; 
G:代表绿色分量; 
B:代表蓝色分量; 
A:代表透明通道分量; 
很明显,RGB色彩空间为一个立方体。该立方体内的每一个点都是不同的颜色值,而GLSL中每一个分量的取值范围为[0, 1]。而一般常用的RGB为24位,即每个分量取值为8位,也就是28=256种取值([0, 255]),最后能够得到224个颜色值。

 HSB颜色模型
HSB(也称HSV)颜色模型,是一种更符合直觉、更易于调色的颜色模型;
H(Hue):指色相,即单纯的颜色;取值范围为[0, 360°]。 
S(Saturation):指饱和度,饱和度越高则颜色越纯;取值范围为[0, 100%]。 
B(Brightness):指明度,又称为值(Value);取值范围为[0, 100%]。 
HSB色彩空间为一个圆柱体:

HSB色彩空间坐标实际上是一个极坐标系;H分量为角度,S分量为弧长,B分量则是垂直于H-S极坐标系。
 HSB转RGB
hifpqt(r,g,b)=⌊60h⌋ mod 6=60h−hi=v∗(1−s)=v∗(1−f∗s)=v∗(1−(1−f)∗s)=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧(v,t,p), if hi=0(q,v,p), if hi=1(p,v,t), if hi=2(p,q,v), if hi=3(t,p,v), if hi=4(v,p,q), if hi=5
一个HSB转RGB的GLSL实现:
1 2 3 4 5 6 7 8 9 10
   | 
  vec3 hsb2rgb( in vec3 c ){     vec3 rgb = clamp(abs(mod(c.x*6.0+vec3(0.0,4.0,2.0),                              6.0)-3.0)-1.0,                      0.0,                      1.0 );     rgb = rgb*rgb*(3.0-2.0*rgb);     return c.z * mix(vec3(1.0), rgb, c.y); }
 
  | 
 
 RGB转HSB
hsvNotes:minmax=⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧0°,60°∗max−ming−b,60°∗max−ming−b+360°,60°∗max−minb−r+120°,60°∗max−minr−g+240°, if max=min if max=r and g≥b if max=r and g<b if max=g if max=b={0,maxmax−min=1−maxmin, if max=0 otherwise=max=min(r,g,b)=max(r,g,b)
 参考文档