Advertisement
Guest User

Untitled

a guest
Apr 17th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define RENDER_DIST 40.0
  2. #define INTERSECT_DIST 0.01
  3.  
  4. float floorHeight = 0.0;
  5. vec3 spherePos;
  6. float sphereRadius = 7.0;
  7.  
  8. float distanceToScene(vec3 origin)
  9. {
  10.     float floor_dist = origin.y - floorHeight;
  11.     float sphere_dist = distance(origin, spherePos) - sphereRadius;
  12.     return min(floor_dist, sphere_dist);
  13. }
  14.  
  15. vec3 normalToSurface(vec3 pos)
  16. {
  17.     vec2 e = vec2(0.01, 0);
  18.     float pos_dist = distanceToScene(pos);
  19.     // vec3 normal =
  20.     return vec3(0, 0, 0);
  21. }
  22.  
  23. float rayMarch(vec3 ray_origin, vec3 ray_direction)
  24. {
  25.     float origin_dist = 0.0;
  26.     while (origin_dist < RENDER_DIST)
  27.     {
  28.         vec3 new_origin = ray_origin + origin_dist * ray_direction;
  29.         float scene_dist = distanceToScene(new_origin);
  30.         if (scene_dist < INTERSECT_DIST) return origin_dist;
  31.         origin_dist += scene_dist;
  32.     }
  33.     return -1.0;
  34. }
  35.  
  36. void mainImage(out vec4 fragColor, in vec2 fragCoord)
  37. {
  38.     vec3 camera = vec3(0.0, 2.0, 1.0);
  39.     vec2 uv = (fragCoord - 0.5 * iResolution.xy) / iResolution.y;
  40.     vec3 direction = normalize(vec3(uv.x, uv.y, 1.0));
  41.    
  42.     spherePos = vec3(0.0, sin(iTime) + 2.0, 25.0);
  43.    
  44.     float dist = rayMarch(camera, direction);
  45.     if (dist > -1.0)
  46.     {
  47.         float colour = 1.0 - (dist / RENDER_DIST);
  48.         fragColor = vec4(colour, colour, colour, 1);
  49.     }
  50.     else
  51.     {
  52.         fragColor = vec4(0, 0, 0, 1);
  53.     }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement