diff options
Diffstat (limited to 'resources/shaders/main.frag')
| -rw-r--r-- | resources/shaders/main.frag | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/resources/shaders/main.frag b/resources/shaders/main.frag new file mode 100644 index 0000000..590b849 --- /dev/null +++ b/resources/shaders/main.frag @@ -0,0 +1,59 @@ +#version 330 core + +uniform vec2 resolution; +uniform float time; + +out vec3 color; + +#define MAX_STEPS 100 +#define MAX_DIST 100. +#define SURF_DIST .01 +#define NORMAL_ACCURACY 0.01 + +#include "objects/sphere.frag" +float GetDist(vec3 p) { + float sphereDist = SphereSDF(p,vec3(0, 1, 6),1); + float planeDist = p.y; + + float d = min(sphereDist, planeDist); + return d; +} + +#include "algorithms/raymarching.frag" +#include "algorithms/normal.frag" + + + +float GetLight(vec3 p) { + vec3 lightPos = vec3(0, 5, 6); + lightPos.xz += vec2(sin(time), cos(time))*2.; + vec3 l = normalize(lightPos-p); + vec3 n = GetNormal(p); + + float dif = clamp(dot(n, l), 0., 1.); + float d = RayMarch(p+n*SURF_DIST*2., l); + if(d<length(lightPos-p)) dif *= .1; + + return dif; +} + +void main() +{ + vec2 uv = (gl_FragCoord.xy-.5*resolution.xy)/resolution.y; + + vec3 col = vec3(0); + + vec3 ro = vec3(0, 1, 0); + vec3 rd = normalize(vec3(uv.x, uv.y, 1)); + + float d = RayMarch(ro, rd); + + vec3 p = ro + rd * d; + + float dif = GetLight(p); + col = vec3(dif); + + col = pow(col, vec3(.4545)); // gamma correction + + color = col; +} |
