feat: isometrc grid

This commit is contained in:
2025-11-09 14:59:08 +01:00
parent e3d6fc0680
commit 75fa5ce704
3 changed files with 86 additions and 5 deletions
+3 -2
View File
@@ -87,9 +87,10 @@ make -f Makefile.dev release-arch
- [ ] Default project - [ ] Default project
- [x] split with includes - [x] split with includes
- [x] src 9 : sentences repeat h - [x] src 9 : sentences repeat h
- [ ] src 11 : isometric grid - [x] src 10 : isometric grid
- [ ] src 12 : pattern in my kitchen - [ ] src 12 : pattern in my kitchen
- [ ] src 13 : ? - [ ] src 13 : cursor with select
- [ ] src 14 : ?
- [ ] src 15 : ? - [ ] src 15 : ?
- [x] fx 11 : spill - [x] fx 11 : spill
- [ ] fx 12 : colorize range (pretty color ranges) - [ ] fx 12 : colorize range (pretty color ranges)
+45
View File
@@ -201,6 +201,51 @@ float h_rect(vec2 uv, vec2 c, vec2 size, float k) {
return rect(uv, c, size + k * 0.5) - rect(uv, c, size - k * 0.5); return rect(uv, c, size + k * 0.5) - rect(uv, c, size - k * 0.5);
} }
float line(vec2 uv, vec2 p1, vec2 p2, float thick) {
vec2 p = p2 - p1;
uv -= p1;
vec2 k;
if (abs(p.y) > abs(p.x)) {
k = vec2(
uv.x - p.x * uv.y / p.y,
uv.y / p.y
);
return step(k.x, thick * 0.5)
* step(-k.x, thick * 0.5)
* step(k.y, 1)
* (1 - step(k.y, 0));
} else {
k = vec2(
uv.x / p.x,
uv.y - p.y * uv.x / p.x
);
return step(k.y, thick * 0.5)
* step(-k.y, thick * 0.5)
* step(k.x, 1)
* (1 - step(k.x, 0));
}
}
const mat2x2 ISOMETRIC_MATRIX = {{0.5, 1}, {0.5, -1}};
vec2 iso(vec2 p) {
return p * ISOMETRIC_MATRIX;
}
vec2 iso_z(float z) {
return vec2(
-z,
z
);
}
vec2 iso(vec3 uv) {
return iso(uv.xy) + iso_z(uv.z);
}
// INPUTS // INPUTS
vec4 reframe(sampler2D tex, vec2 uv) vec4 reframe(sampler2D tex, vec2 uv)
+38 -3
View File
@@ -280,10 +280,9 @@ subroutine(src_stage_sub) vec4 src_9(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3
return vec4(f); return vec4(f);
} }
// TODO SRC 10 // SRC 10 : isometric grid
subroutine(src_stage_sub) vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) subroutine(src_stage_sub) vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
{ {
return src_3(vUV, seed, b1, f1, b2, f2, b3, f3);
// start // start
vec2 uv0 = vUV.st; vec2 uv0 = vUV.st;
@@ -292,9 +291,45 @@ subroutine(src_stage_sub) vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3
// controls // controls
float zoom = 5 + magic(f1, b1, seed + 10) * 15;
float h_scroll = magic(f2, b2, seed + 20);
float max_elevation = magic(f3, b3, seed + 30) * 0.5;
float thick = 0.1;
// logic // logic
vec2 uv2 = uv1;
vec2 uv3 = iso(uv2);
uv3 += vec2(h_scroll, 0);
uv3 *= round(zoom);
vec2 umax = vec2(round(zoom), 300);
vec2 u0 = mod(floor(uv3), umax);
vec2 u1 = mod(floor(uv3 + vec2(1, 0)), umax);
vec2 u2 = mod(floor(uv3 + vec2(0, 1)), umax);
vec2 u3 = mod(floor(uv3 + vec2(-1, 0)), umax);
vec2 u4 = mod(floor(uv3 + vec2(0, -1)), umax);
return texture(iTex0, vUV); float e0 = (rand(floor(u0)) * 2 - 1) * max_elevation;
float e1 = (rand(floor(u1)) * 2 - 1) * max_elevation;
float e2 = (rand(floor(u2)) * 2 - 1) * max_elevation;
float e3 = (rand(floor(u3)) * 2 - 1) * max_elevation;
float e4 = (rand(floor(u4)) * 2 - 1) * max_elevation;
uv3 = mod(uv3, 1.0) - 0.5;
float f = 0;
f = line(uv3, vec2(0, 0) - iso_z(e0), vec2(1, 0) - iso_z(e1), thick)
+ line(uv3, vec2(0, 0) - iso_z(e0), vec2(0, 1) - iso_z(e2), thick)
+ line(uv3, vec2(0, 0) - iso_z(e0), vec2(-1, 0) - iso_z(e3), thick)
+ line(uv3, vec2(0, 0) - iso_z(e0), vec2(0, -1) - iso_z(e4), thick);
return vec4(f);
} }
// SRC 11 : video in 2 + thru // SRC 11 : video in 2 + thru