From ac6a0bda83f43b448dcad7b07ff97c72144757d1 Mon Sep 17 00:00:00 2001 From: CrispyPin Date: Tue, 28 May 2024 21:06:48 +0200 Subject: [PATCH] add square binary clock --- README.md | 16 +++++++++++++++- binary_clock_square.glsl | 31 +++++++++++++++++++++++++++++++ demo/binary_clock_square.png | Bin 0 -> 10008 bytes 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 binary_clock_square.glsl create mode 100644 demo/binary_clock_square.png diff --git a/README.md b/README.md index c7404d5..e63884b 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,21 @@ Displays hours, minutes and seconds in binary as rows of filled circles. The exa ![](demo/binary_clock.png) -### interactive_game_of_life +### binary_clock_square.glsl +Divides the day into 65536 beats, roughly 1.3 seconds each, and displays the time in a 4x4 grid as binary. The least significant bit is to the bottom right, increasing left first then up. + +The example below is showing the time `1101 1110 0011 1001` or `DE39`in hexadecimal (one digit per row of dots), which is equivalent to about `20:50:00`. + +![](demo/binary_clock_square.png) + +Formula for converting a time to beats: `(hours * 3600 + minutes * 60 + seconds) / 86400 * 65536` + +And to convert back to hours, minutes and seconds: +- `seconds = int((beats * 86400 / 65536) % 60)` +- `minutes = int((beats * 86400 / 65536) / 60 % 60)` +- `hours = int((beats * 86400 / 65536) / 3600)` + +### interactive_game_of_life.glsl A rainbow-coloured simulation of [Conway's Game of Life](https://conwaylife.com/wiki/Conway%27s_Game_of_Life). The edges of the screen are randomised so that the pattern never stabilises. Pressing on the screen will turn on cells in a small radius. ![](demo/game_of_life.png) \ No newline at end of file diff --git a/binary_clock_square.glsl b/binary_clock_square.glsl new file mode 100644 index 0000000..1d08949 --- /dev/null +++ b/binary_clock_square.glsl @@ -0,0 +1,31 @@ +#version 300 es +#ifdef GL_FRAGMENT_PRECISION_HIGH +precision highp float; +#else +precision mediump float; +#endif + +uniform vec2 resolution; +uniform vec4 date; + +out vec3 col; + +void main() { + vec2 uv = gl_FragCoord.xy / resolution.x; + uv.x = 1.0 - uv.x; + uv.y -= (resolution.y / resolution.x) * 0.5 - 0.5; + + int x = int(uv.x * 4.0); + int y = int(uv.y * 4.0 + 1.0) - 1; + col = vec3(0.1, 0.1, 0.1); + if (y < 4 && y >= 0) { + vec2 c = vec2(x, y) / 4.0 + 0.125; + float r = length(c - uv); + float seconds = date.w; + int time = int(seconds / (3600.0 * 24.0) * 65536.0); + int bit = y * 4 + x; + bool state = ((time >> bit) & 1) == 1; + if (r < 0.05 && (r > 0.04 || state)) + col = vec3(0.1, 1, 1); + } +} diff --git a/demo/binary_clock_square.png b/demo/binary_clock_square.png new file mode 100644 index 0000000000000000000000000000000000000000..27b494c86e7aecf38d61f5aa1d30ca0814d2eee3 GIT binary patch literal 10008 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 literal 0 HcmV?d00001