You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.6 KiB
87 lines
2.6 KiB
#iChannel0 "file://./Textures/colorful.jpg"
|
|
#iChannel0::WrapMode "Mirror"
|
|
|
|
float pow2(float x) {
|
|
return x*x;
|
|
}
|
|
|
|
/* euclidian */
|
|
float colDist(vec3 col1, vec3 col2) {
|
|
return distance(col1, col2);
|
|
}
|
|
|
|
/* optimized L*a*b*-like */
|
|
float colDist2(vec3 col1, vec3 col2) {
|
|
float r_mean = (col1.r + col2.r) * 256./2.0;
|
|
|
|
float r = (col1.r - col2.r) * 256.;
|
|
float g = (col1.g - col2.g) * 256.;
|
|
float b = (col1.b - col2.b) * 256.;
|
|
|
|
//float dc = sqrt((2.0+r_mean/256.) * pow2(r)
|
|
// + 4.0*pow2(g)
|
|
// + (2.0 + (255.-r_mean)/256.) * pow2(b) );
|
|
float dc = sqrt( (512.+r_mean)*r*r/256.
|
|
+ 4.*g*g +
|
|
(767.-r_mean)*b*b/256.);
|
|
|
|
return dc;
|
|
}
|
|
|
|
vec3 bestColor(vec3 col, vec3 pal[22]) {
|
|
//col = pow(col, vec3(1./2.2));
|
|
//col.r = pow(col.r,1./1.7);
|
|
//col.g = pow(col.g,1./1.7);
|
|
//col.b = pow(col.b,1./2.2);
|
|
float mdist = colDist2(col, pal[0]);
|
|
vec3 bcolor = pal[0];
|
|
|
|
for(int i=0;i<22;i++) {
|
|
float d = colDist2(col, pal[i]);
|
|
if (d < mdist ) {
|
|
mdist = d;
|
|
bcolor = pal[i];
|
|
}
|
|
}
|
|
return bcolor;
|
|
}
|
|
|
|
|
|
void mainImage ( out vec4 fragColor, in vec2 fragCoord) {
|
|
|
|
vec3 pal[22];
|
|
|
|
pal[0]=vec3(0.953125,0.953125,0.953125);
|
|
pal[1] = vec3(0.578125,0.6875,0.7578125);
|
|
pal[2] = vec3(0.3359375,0.421875,0.5234375);
|
|
pal[3] = vec3(0.19921875,0.234375,0.33984375);
|
|
pal[4] = vec3(0.1015625,0.109375,0.171875);
|
|
pal[5] = vec3(0.99609375,0.80078125,0.45703125);
|
|
pal[6] = vec3(0.93359375,0.48828125,0.33984375);
|
|
pal[7] = vec3(0.55859375,0.3359375,0.23046875);
|
|
pal[8] = vec3(0.3984375,0.22265625,0.19140625);
|
|
pal[9] = vec3(0.65234375,0.9375,0.4375);
|
|
pal[10] = vec3(0.21875,0.71484375,0.390625);
|
|
pal[11] = vec3(0.14453125,0.44140625,0.47265625);
|
|
pal[12] = vec3(0.84765625,0.33984375,0.38671875);
|
|
pal[13] = vec3(0.921875,0.19921875,0.296875);
|
|
pal[14] = vec3(0.69140625,0.2421875,0.32421875);
|
|
pal[15] = vec3(0.4609375,0.2578125,0.5390625);
|
|
pal[16] = vec3(0.36328125,0.15234375,0.36328125);
|
|
pal[17] = vec3(0.26953125,0.15625,0.234375);
|
|
pal[18] = vec3(0.5859375,0.78125,0.93359375);
|
|
pal[19] = vec3(0.25390625,0.6484375,0.9609375);
|
|
pal[20] = vec3(0.23046875,0.36328125,0.78515625);
|
|
pal[21] = vec3(0.24609375,0.24609375,0.453125);
|
|
|
|
|
|
vec2 uv = (fragCoord/iResolution.y);
|
|
|
|
vec4 col = vec4(0,0,0,1.0);
|
|
|
|
vec3 texCol = texture(iChannel0, uv).rgb;
|
|
vec3 tmp = bestColor( texCol, pal);
|
|
|
|
col.rgb = tmp;
|
|
fragColor = col;
|
|
} |