Browse Source

Switch scene_f over to returning a SceneResult{dist, mat_idx}

master
gradient 8 years ago
parent
commit
65b932f7bc
2 changed files with 13 additions and 4 deletions
  1. +8
    -0
      examples/test/shaders/march_prolog.glsl
  2. +5
    -4
      examples/test/shaders/test.frag

+ 8
- 0
examples/test/shaders/march_prolog.glsl View File

@ -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;
}

+ 5
- 4
examples/test/shaders/test.frag View File

@ -18,6 +18,7 @@ uniform float u_Time;
out vec4 color; out vec4 color;
#include "utils.glsl" #include "utils.glsl"
#include "march_prolog.glsl"
#include "hg_sdf.glsl" #include "hg_sdf.glsl"
#include "colormap_cool.glsl" #include "colormap_cool.glsl"
@ -26,11 +27,11 @@ vec3 ray_dir(float fov, vec2 uv) {
return normalize(vec3(uv, z)); 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) { vec3 estimate_scene_normal(vec3 p) {


Loading…
Cancel
Save