156 lines
4.6 KiB
GLSL
156 lines
4.6 KiB
GLSL
|
|
|
||
|
|
#ifdef GL_ES
|
||
|
|
precision highp float;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
vec2 uv;
|
||
|
|
|
||
|
|
uniform float time;
|
||
|
|
uniform vec2 resolution;
|
||
|
|
|
||
|
|
const vec2 ch_size = vec2(1.0, 2.0) * 0.6; // character size (X,Y)
|
||
|
|
const vec2 ch_space = ch_size + vec2(1.0, 1.0); // character distance Vector(X,Y)
|
||
|
|
const vec2 ch_start = vec2 (ch_space.x * -5., 1.); // start position
|
||
|
|
vec2 ch_pos = vec2 (0.0, 0.0); // character position(X,Y)
|
||
|
|
// vec3 ch_color = vec3 (1.5, 0.75, 0.5); // character color (R,G,B)
|
||
|
|
//const vec3 bg_color = vec3 (0.2, 0.2, 0.2); // background color (R,G,B)
|
||
|
|
|
||
|
|
#define REPEAT_SIGN false // True/False; True=Multiple, False=Single
|
||
|
|
|
||
|
|
/* 16 segment display...Akin to LED Display.
|
||
|
|
|
||
|
|
Segment bit positions:
|
||
|
|
|
||
|
|
|
||
|
|
binary to hex -> 0x119F
|
||
|
|
*/
|
||
|
|
|
||
|
|
#define n0 ddigit(0x22FF);
|
||
|
|
#define n1 ddigit(0x0281);
|
||
|
|
#define n2 ddigit(0x1177);
|
||
|
|
#define n3 ddigit(0x11E7);
|
||
|
|
#define n4 ddigit(0x5508);
|
||
|
|
#define n5 ddigit(0x11EE);
|
||
|
|
#define n6 ddigit(0x11FE);
|
||
|
|
#define n7 ddigit(0x2206);
|
||
|
|
#define n8 ddigit(0x11FF);
|
||
|
|
#define n9 ddigit(0x11EF);
|
||
|
|
|
||
|
|
#define A ddigit(0x119F);
|
||
|
|
#define B ddigit(0x927E);
|
||
|
|
#define C ddigit(0x007E);
|
||
|
|
#define D ddigit(0x44E7);
|
||
|
|
#define E ddigit(0x107E);
|
||
|
|
#define F ddigit(0x101E);
|
||
|
|
#define G ddigit(0x807E);
|
||
|
|
#define H ddigit(0x1199);
|
||
|
|
#define I ddigit(0x4466);
|
||
|
|
#define J ddigit(0x4436);
|
||
|
|
#define K ddigit(0x9218);
|
||
|
|
#define L ddigit(0x0078);
|
||
|
|
#define M ddigit(0x0A99);
|
||
|
|
#define N ddigit(0x8899);
|
||
|
|
#define O ddigit(0x00FF);
|
||
|
|
#define P ddigit(0x111F);
|
||
|
|
#define Q ddigit(0x80FF);
|
||
|
|
#define R ddigit(0x911F);
|
||
|
|
#define S ddigit(0x8866);
|
||
|
|
#define T ddigit(0x4406);
|
||
|
|
#define U ddigit(0x00F9);
|
||
|
|
#define V ddigit(0x2218);
|
||
|
|
#define W ddigit(0xA099);
|
||
|
|
#define X ddigit(0xAA00);
|
||
|
|
#define Y ddigit(0x4A00);
|
||
|
|
#define Z ddigit(0x2266);
|
||
|
|
#define _ ch_pos.x += ch_space.x;
|
||
|
|
#define s_dot ddigit(0);
|
||
|
|
#define s_minus ddigit(0x1100);
|
||
|
|
#define s_plus ddigit(0x5500);
|
||
|
|
#define s_greater ddigit(0x2800);
|
||
|
|
#define s_less ddigit(0x8200);
|
||
|
|
#define s_sqrt ddigit(0x0C02);
|
||
|
|
#define nl1 ch_pos = ch_start; ch_pos.y -= 3.0;
|
||
|
|
#define nl2 ch_pos = ch_start; ch_pos.y -= 6.0;
|
||
|
|
#define nl3 ch_pos = ch_start; ch_pos.y -= 9.0;
|
||
|
|
|
||
|
|
float dseg(vec2 p0, vec2 p1)
|
||
|
|
{
|
||
|
|
vec2 dir = normalize(p1 - p0);
|
||
|
|
vec2 cp = (uv - ch_pos - p0) * mat2(dir.x, dir.y,-dir.y, dir.x);
|
||
|
|
return distance(cp, clamp(cp, vec2(0), vec2(distance(p0, p1), 0)));
|
||
|
|
}
|
||
|
|
|
||
|
|
bool bit(int n, int b)
|
||
|
|
{
|
||
|
|
return mod(floor(float(n) / exp2(floor(float(b)))), 2.0) != 0.0;
|
||
|
|
}
|
||
|
|
|
||
|
|
float d = 1e6;
|
||
|
|
|
||
|
|
void ddigit(int n)
|
||
|
|
{
|
||
|
|
float v = 1e6;
|
||
|
|
vec2 cp = uv - ch_pos;
|
||
|
|
if (n == 0) v = min(v, dseg(vec2(-0.405, -1.000), vec2(-0.500, -1.000)));
|
||
|
|
if (bit(n, 0)) v = min(v, dseg(vec2( 0.500, 0.063), vec2( 0.500, 0.937)));
|
||
|
|
if (bit(n, 1)) v = min(v, dseg(vec2( 0.438, 1.000), vec2( 0.063, 1.000000000)));
|
||
|
|
if (bit(n, 2)) v = min(v, dseg(vec2(-0.063, 1.000), vec2(-0.438, 1.000)));
|
||
|
|
if (bit(n, 3)) v = min(v, dseg(vec2(-0.500, 0.937), vec2(-0.500, 0.062)));
|
||
|
|
if (bit(n, 4)) v = min(v, dseg(vec2(-0.500, -0.063), vec2(-0.500, -0.938)));
|
||
|
|
if (bit(n, 5)) v = min(v, dseg(vec2(-0.438, -1.000), vec2(-0.063, -1.000)));
|
||
|
|
if (bit(n, 6)) v = min(v, dseg(vec2( 0.063, -1.000), vec2( 0.438, -1.000)));
|
||
|
|
if (bit(n, 7)) v = min(v, dseg(vec2( 0.500, -0.938), vec2( 0.500, -0.063)));
|
||
|
|
if (bit(n, 8)) v = min(v, dseg(vec2( 0.063, 0.000), vec2( 0.438, -0.000)));
|
||
|
|
if (bit(n, 9)) v = min(v, dseg(vec2( 0.063, 0.063), vec2( 0.438, 0.938)));
|
||
|
|
if (bit(n, 10)) v = min(v, dseg(vec2( 0.000, 0.063), vec2( 0.000, 0.937)));
|
||
|
|
if (bit(n, 11)) v = min(v, dseg(vec2(-0.063, 0.063), vec2(-0.438, 0.938)));
|
||
|
|
if (bit(n, 12)) v = min(v, dseg(vec2(-0.438, 0.000), vec2(-0.063, -0.000)));
|
||
|
|
if (bit(n, 13)) v = min(v, dseg(vec2(-0.063, -0.063), vec2(-0.438, -0.938)));
|
||
|
|
if (bit(n, 14)) v = min(v, dseg(vec2( 0.000, -0.938), vec2( 0.000, -0.063)));
|
||
|
|
if (bit(n, 15)) v = min(v, dseg(vec2( 0.063, -0.063), vec2( 0.438, -0.938)));
|
||
|
|
ch_pos.x += ch_space.x;
|
||
|
|
d = min(d, v);
|
||
|
|
}
|
||
|
|
mat2 rotate(float a)
|
||
|
|
{
|
||
|
|
float c = cos(a);
|
||
|
|
float s = sin(a);
|
||
|
|
return mat2(c, s, -s, c);
|
||
|
|
}
|
||
|
|
vec3 hsv2rgb_smooth( 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); // cubic smoothing
|
||
|
|
|
||
|
|
return c.z * mix( vec3(1.0), rgb, c.y);
|
||
|
|
}
|
||
|
|
void main( void )
|
||
|
|
{
|
||
|
|
|
||
|
|
vec2 aspect = resolution.xy / resolution.y;
|
||
|
|
uv = ( gl_FragCoord.xy / resolution.y ) - aspect / 2.0;
|
||
|
|
float _d = 1.0-length(uv);
|
||
|
|
uv *= 18.0 ;
|
||
|
|
uv.y -= 3.;
|
||
|
|
//uv *= rotate(time+uv.x*0.05);
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
vec3 ch_color = hsv2rgb_smooth(vec3(time*0.4+uv.y*0.1,0.5,1.0));
|
||
|
|
|
||
|
|
vec3 bg_color = vec3(_d*0.4, _d*0.2, _d*0.1);
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
uv.x += -1.+sin(time+uv.y*0.7)*0.5;
|
||
|
|
ch_pos = ch_start;
|
||
|
|
|
||
|
|
_ C L O U D N I N J A
|
||
|
|
|
||
|
|
|
||
|
|
vec3 color = mix(ch_color, bg_color, 1.0- (0.08 / d*2.0)); // shading
|
||
|
|
gl_FragColor = vec4(color, 1.0);
|
||
|
|
}
|