Clutter Engine 0.0.1
Loading...
Searching...
No Matches
color_space.inl
1
2
3namespace glm
4{
5 template<typename T, qualifier Q>
6 GLM_FUNC_QUALIFIER vec<3, T, Q> rgbColor(const vec<3, T, Q>& hsvColor)
7 {
10
11 if(hsv.y == static_cast<T>(0))
12 // achromatic (grey)
13 rgbColor = vec<3, T, Q>(hsv.z);
14 else
15 {
16 T sector = floor(hsv.x * (T(1) / T(60)));
17 T frac = (hsv.x * (T(1) / T(60))) - sector;
18 // factorial part of h
19 T o = hsv.z * (T(1) - hsv.y);
20 T p = hsv.z * (T(1) - hsv.y * frac);
21 T q = hsv.z * (T(1) - hsv.y * (T(1) - frac));
22
23 switch(int(sector))
24 {
25 default:
26 case 0:
27 rgbColor.r = hsv.z;
28 rgbColor.g = q;
29 rgbColor.b = o;
30 break;
31 case 1:
32 rgbColor.r = p;
33 rgbColor.g = hsv.z;
34 rgbColor.b = o;
35 break;
36 case 2:
37 rgbColor.r = o;
38 rgbColor.g = hsv.z;
39 rgbColor.b = q;
40 break;
41 case 3:
42 rgbColor.r = o;
43 rgbColor.g = p;
44 rgbColor.b = hsv.z;
45 break;
46 case 4:
47 rgbColor.r = q;
48 rgbColor.g = o;
49 rgbColor.b = hsv.z;
50 break;
51 case 5:
52 rgbColor.r = hsv.z;
53 rgbColor.g = o;
54 rgbColor.b = p;
55 break;
56 }
57 }
58
59 return rgbColor;
60 }
61
62 template<typename T, qualifier Q>
63 GLM_FUNC_QUALIFIER vec<3, T, Q> hsvColor(const vec<3, T, Q>& rgbColor)
64 {
66 float Min = min(min(rgbColor.r, rgbColor.g), rgbColor.b);
67 float Max = max(max(rgbColor.r, rgbColor.g), rgbColor.b);
68 float Delta = Max - Min;
69
70 hsv.z = Max;
71
72 if(Max != static_cast<T>(0))
73 {
74 hsv.y = Delta / hsv.z;
75 T h = static_cast<T>(0);
76
77 if(rgbColor.r == Max)
78 // between yellow & magenta
79 h = static_cast<T>(0) + T(60) * (rgbColor.g - rgbColor.b) / Delta;
80 else if(rgbColor.g == Max)
81 // between cyan & yellow
82 h = static_cast<T>(120) + T(60) * (rgbColor.b - rgbColor.r) / Delta;
83 else
84 // between magenta & cyan
85 h = static_cast<T>(240) + T(60) * (rgbColor.r - rgbColor.g) / Delta;
86
87 if(h < T(0))
88 hsv.x = h + T(360);
89 else
90 hsv.x = h;
91 }
92 else
93 {
94 // If r = g = b = 0 then s = 0, h is undefined
95 hsv.y = static_cast<T>(0);
96 hsv.x = static_cast<T>(0);
97 }
98
99 return hsv;
100 }
101
102 template<typename T>
103 GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> saturation(T const s)
104 {
105 vec<3, T, defaultp> rgbw = vec<3, T, defaultp>(T(0.2126), T(0.7152), T(0.0722));
106
107 vec<3, T, defaultp> const col((T(1) - s) * rgbw);
108
109 mat<4, 4, T, defaultp> result(T(1));
110 result[0][0] = col.x + s;
111 result[0][1] = col.x;
112 result[0][2] = col.x;
113 result[1][0] = col.y;
114 result[1][1] = col.y + s;
115 result[1][2] = col.y;
116 result[2][0] = col.z;
117 result[2][1] = col.z;
118 result[2][2] = col.z + s;
119
120 return result;
121 }
122
123 template<typename T, qualifier Q>
124 GLM_FUNC_QUALIFIER vec<3, T, Q> saturation(const T s, const vec<3, T, Q>& color)
125 {
126 return vec<3, T, Q>(saturation(s) * vec<4, T, Q>(color, T(0)));
127 }
128
129 template<typename T, qualifier Q>
130 GLM_FUNC_QUALIFIER vec<4, T, Q> saturation(const T s, const vec<4, T, Q>& color)
131 {
132 return saturation(s) * color;
133 }
134
135 template<typename T, qualifier Q>
136 GLM_FUNC_QUALIFIER T luminosity(const vec<3, T, Q>& color)
137 {
138 const vec<3, T, Q> tmp = vec<3, T, Q>(0.33, 0.59, 0.11);
139 return dot(color, tmp);
140 }
141}//namespace glm
GLM_FUNC_DECL GLM_CONSTEXPR genType min(genType x, genType y)
Definition func_common.inl:17
GLM_FUNC_DECL vec< L, T, Q > floor(vec< L, T, Q > const &x)
Definition func_common.inl:307
GLM_FUNC_DECL GLM_CONSTEXPR genType max(genType x, genType y)
Definition func_common.inl:25
GLM_FUNC_DECL vec< 3, T, Q > rgbColor(vec< 3, T, Q > const &hsvValue)
Definition color_space.inl:6
GLM_FUNC_DECL mat< 4, 4, T, defaultp > saturation(T const s)
Definition color_space.inl:103
GLM_FUNC_DECL T luminosity(vec< 3, T, Q > const &color)
Definition color_space.inl:136
GLM_FUNC_DECL vec< 3, T, Q > hsvColor(vec< 3, T, Q > const &rgbValue)
Definition color_space.inl:63
Core features
Definition common.hpp:21
Definition qualifier.hpp:36
Definition qualifier.hpp:35