Browse Source

Update raymarch() to use a SceneResult

master
gradient 8 years ago
parent
commit
4e714faf4b
1 changed files with 7 additions and 6 deletions
  1. +7
    -6
      examples/test/shaders/test.frag

+ 7
- 6
examples/test/shaders/test.frag View File

@ -49,13 +49,13 @@ vec3 estimate_scene_normal(vec3 p) {
vec3 raymarch(vec3 o, vec3 d, float start, float end) {
float t = start;
for (int i = 0; i < MAX_STEPS; i++) {
float dist = scene_f(o + d*t);
if (dist < EPSILON || t > end)
return vec3(t, i, 0.);
SceneResult sr = scene_f(o + d*t);
if (sr.d < EPSILON || t > end)
return vec3(t, sr.mat_idx, i);
t += dist;
t += sr.d;
}
return vec3(end, MAX_STEPS, 0.);
return vec3(end, -1., MAX_STEPS);
}
vec4 shade(vec3 p) {
@ -77,7 +77,8 @@ void main() {
vec3 result = raymarch(eye, dir, NEAR_D, FAR_D);
float depth = result.x;
float iters = result.y;
float mat_idx = result.y;
float iters = result.z;
if (depth >= FAR_D) {
color = vec4(1.0, 0.5, 1.0, 1.0);
return;


Loading…
Cancel
Save