From 18bcecf7b3882a8d34a581c99bc293751fbae4c7 Mon Sep 17 00:00:00 2001 From: Sunpy Date: Wed, 12 Feb 2020 14:10:50 +0100 Subject: [PATCH] Added polkadots --- shaders/background.py | 2 +- shaders/default.py | 2 +- shaders/polkadots.py | 37 +++++++++++++++++++++++++++++++++++++ shaders/wave.py | 2 +- 4 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 shaders/polkadots.py diff --git a/shaders/background.py b/shaders/background.py index e32d814..72199b9 100644 --- a/shaders/background.py +++ b/shaders/background.py @@ -1,7 +1,7 @@ import math from pixel import Pixel -def main(pixel: Pixel, resolution: tuple, frag_coord: tuple, time: float): +def main(pixel: Pixel, resolution: tuple, frag_coord: tuple, time: float): # https://www.shadertoy.com/view/lsyyz3 uv = (frag_coord[0] / resolution[0], frag_coord[1] / resolution[1]) h = math.sin(uv[0] * math.pi + uv[1] * 10.0 + time + math.cos(uv[0] * uv[1] + uv[1] * 7.1823) * math.sin(uv[0] * 14.2)) diff --git a/shaders/default.py b/shaders/default.py index 0289551..07a3313 100644 --- a/shaders/default.py +++ b/shaders/default.py @@ -1,7 +1,7 @@ import math from pixel import Pixel -def main(pixel: Pixel, resolution: tuple, frag_coord: tuple, time: float): +def main(pixel: Pixel, resolution: tuple, frag_coord: tuple, time: float): # default shader when creating a new shader on shadertoy uv = (frag_coord[0] / resolution[0], frag_coord[1] / resolution[1]) pixel.background_color.set( diff --git a/shaders/polkadots.py b/shaders/polkadots.py new file mode 100644 index 0000000..d0354bf --- /dev/null +++ b/shaders/polkadots.py @@ -0,0 +1,37 @@ +import math +from pixel import Pixel + +COLOR_A = (0.0, 0.7, 0.8) +COLOR_B = (0.8, 0.0, 0.7) + +HEIGHT = 6.0 +RADIUS = 1. + +def distance(a: tuple, b: tuple) -> float: + if len(a) != len(b): + raise TypeError("Mismatching dimentional vector passed") + + dist = 0 + for i in range(len(a)): + d = b[i] - a[i] + dist += d * d + + return dist ** 0.5 + +def get_col(uv: tuple) -> tuple: + uv = tuple(math.floor(x) for x in uv) + return COLOR_A if ((uv[0] + uv[1]) % 2) == 0.0 else COLOR_B + +def main(pixel: Pixel, resolution: tuple, frag_coord: tuple, time: float): # https://www.shadertoy.com/view/lsyyDK + uv = [ x * HEIGHT for x in (frag_coord[0] / resolution[1], frag_coord[1] / resolution[1]) ] + + direction = int(time) % 2 + shift = math.floor(uv[1 - direction]) + shift = 2.0 * (shift % 2) - 1.0 + uv[direction] += shift * time + + dist = 1.0 - distance((0.0, 0.0), tuple((x % 1.0) - 0.5 for x in uv)) / RADIUS + + col = tuple(x * dist for x in get_col(uv)) + + pixel.background_color.set( *col ) \ No newline at end of file diff --git a/shaders/wave.py b/shaders/wave.py index 852c3fa..7ce858c 100644 --- a/shaders/wave.py +++ b/shaders/wave.py @@ -1,7 +1,7 @@ import math from pixel import Pixel -def main(pixel: Pixel, resolution: tuple, frag_coord: tuple, time: float): +def main(pixel: Pixel, resolution: tuple, frag_coord: tuple, time: float): # https://www.shadertoy.com/view/Wd23W3 uv = (frag_coord[0] / resolution[0], frag_coord[1] / resolution[1]) def hsv2rgb(h, s, v) -> tuple: