Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define RENDER_DIST 40.0
- #define INTERSECT_DIST 0.01
- float floorHeight = 0.0;
- vec3 spherePos;
- float sphereRadius = 7.0;
- float distanceToScene(vec3 origin)
- {
- float floor_dist = origin.y - floorHeight;
- float sphere_dist = distance(origin, spherePos) - sphereRadius;
- return min(floor_dist, sphere_dist);
- }
- vec3 normalToSurface(vec3 pos)
- {
- vec2 e = vec2(0.01, 0);
- float pos_dist = distanceToScene(pos);
- // vec3 normal =
- return vec3(0, 0, 0);
- }
- float rayMarch(vec3 ray_origin, vec3 ray_direction)
- {
- float origin_dist = 0.0;
- while (origin_dist < RENDER_DIST)
- {
- vec3 new_origin = ray_origin + origin_dist * ray_direction;
- float scene_dist = distanceToScene(new_origin);
- if (scene_dist < INTERSECT_DIST) return origin_dist;
- origin_dist += scene_dist;
- }
- return -1.0;
- }
- void mainImage(out vec4 fragColor, in vec2 fragCoord)
- {
- vec3 camera = vec3(0.0, 2.0, 1.0);
- vec2 uv = (fragCoord - 0.5 * iResolution.xy) / iResolution.y;
- vec3 direction = normalize(vec3(uv.x, uv.y, 1.0));
- spherePos = vec3(0.0, sin(iTime) + 2.0, 25.0);
- float dist = rayMarch(camera, direction);
- if (dist > -1.0)
- {
- float colour = 1.0 - (dist / RENDER_DIST);
- fragColor = vec4(colour, colour, colour, 1);
- }
- else
- {
- fragColor = vec4(0, 0, 0, 1);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement