From 65b932f7bc5c733c1309e5d120854fa7918e738e Mon Sep 17 00:00:00 2001 From: gradient Date: Mon, 29 May 2017 13:23:13 -0500 Subject: [PATCH] Switch scene_f over to returning a SceneResult{dist, mat_idx} --- examples/test/shaders/march_prolog.glsl | 8 ++++++++ examples/test/shaders/test.frag | 9 +++++---- 2 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 examples/test/shaders/march_prolog.glsl diff --git a/examples/test/shaders/march_prolog.glsl b/examples/test/shaders/march_prolog.glsl new file mode 100644 index 0000000..c6c8376 --- /dev/null +++ b/examples/test/shaders/march_prolog.glsl @@ -0,0 +1,8 @@ +struct SceneResult { + float d; + float mat_idx; +}; + +SceneResult min_sr(SceneResult a, SceneResult b) { + return (a.d < b.d) ? a : b; +} diff --git a/examples/test/shaders/test.frag b/examples/test/shaders/test.frag index 8caaf54..e3736b4 100644 --- a/examples/test/shaders/test.frag +++ b/examples/test/shaders/test.frag @@ -18,6 +18,7 @@ uniform float u_Time; out vec4 color; #include "utils.glsl" +#include "march_prolog.glsl" #include "hg_sdf.glsl" #include "colormap_cool.glsl" @@ -26,11 +27,11 @@ vec3 ray_dir(float fov, vec2 uv) { return normalize(vec3(uv, z)); } -float scene_f(vec3 p) { - float b1 = fBox(p, vec3(1)); - float s2 = fSphere(p + vec3(1), 1.0); +SceneResult scene_f(vec3 p) { + SceneResult box = SceneResult(fBox(p, vec3(1)), 1.); + SceneResult sphere = SceneResult(fSphere(p + vec3(1), 1.0), 2.); - return fOpUnionRound(b1, s2, 0.5); + return min_sr(box, sphere); } vec3 estimate_scene_normal(vec3 p) {