From d706da69e9826c9da324bb1c929b84fd2aeb304f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Con=C3=A1l?= Date: Fri, 9 Feb 2024 08:35:11 -0500 Subject: [PATCH] Added box (very exciting) --- assets/shaders/ray.frag | 30 +++++++++++++++++++++++------- assets/shaders/ray.frag.spv | Bin 3448 -> 5052 bytes assets/shaders/test | 0 3 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 assets/shaders/test diff --git a/assets/shaders/ray.frag b/assets/shaders/ray.frag index 334e4ab..bc106b5 100644 --- a/assets/shaders/ray.frag +++ b/assets/shaders/ray.frag @@ -10,12 +10,24 @@ layout (set = 0, binding = 0) uniform Matrices { layout (location = 0) in vec2 pos; layout (location = 0) out vec4 fragColor; -float sphere(vec3 p, vec3 center, float r) { - return length(p-center) - r; +float opUnion(float v1, float v2) { + return min(v1, v2); +} + +float box(vec3 p, vec3 c, vec3 r) { + p -= c; + vec3 q = abs(p) - r; + return length(max(q,0.0)) + min(max(q.x, max(q.y,q.z)), 0.0); +} + +float sphere(vec3 p, vec3 c, float r) { + return length(p-c) - r; } float sdf(vec3 pos) { - return sphere(pos, vec3(0.0, 0.0, 0.0), 3.0); + float d = sphere(pos, vec3(0.0, 0.0, 0.0), 3.0); + d = opUnion(d, box(pos, vec3(0.0, -10.0, 0.0), vec3(10.0, 1.0, 10.0))); + return d; } float raycast(vec3 dir) { @@ -23,13 +35,13 @@ float raycast(vec3 dir) { for(int i = 0; i < 64; i++) { float dt = sdf(cam_pos + dir * t); if(dt < 0.0001*t) - return float(i) / 64.0; + return t; else if(dt > 200.0) - return 1.0; + return -1.0; t += dt; } - return 1.0; + return -1.0; } vec3 raygen() { @@ -43,6 +55,10 @@ vec3 raygen() { void main() { vec3 dir = raygen(); float d = raycast(dir); + vec3 point = cam_pos + dir * d; - fragColor = vec4(d); + if(d < 0.0) + fragColor = vec4(0.0); + else + fragColor = vec4(mod(point.y, 1.0)); } \ No newline at end of file diff --git a/assets/shaders/ray.frag.spv b/assets/shaders/ray.frag.spv index b44de57b47238fa83dad27018854b862245c72d4..1bb15e837f4c2998507999f4c571cedfa54c2e16 100644 GIT binary patch literal 5052 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 WNH0hZ=KnS%|AXW~X$2$(N-F@6wHK)X diff --git a/assets/shaders/test b/assets/shaders/test new file mode 100644 index 0000000..e69de29