diff options
Diffstat (limited to 'resources/shaders/main.glsl')
| -rw-r--r-- | resources/shaders/main.glsl | 93 |
1 files changed, 0 insertions, 93 deletions
diff --git a/resources/shaders/main.glsl b/resources/shaders/main.glsl deleted file mode 100644 index 2888d56..0000000 --- a/resources/shaders/main.glsl +++ /dev/null @@ -1,93 +0,0 @@ -// ----- Vertex Shader ----- -#version 330 core - -layout(location = 0) in vec3 position; -uniform mat4 projection; -uniform mat4 model; - -void main(){ - gl_Position = projection * model * vec4(position,1); -} - -// ----- Fragment Shader ----- - -#version 330 core - -uniform vec2 resolution; -uniform float time; - -out vec3 color; - - -#define MAX_STEPS 100 -#define MAX_DIST 100. -#define SURF_DIST .01 - -float GetDist(vec3 p) { - vec4 s = vec4(0, 1, 6, 1); - - float sphereDist = length(p-s.xyz)-s.w; - float planeDist = p.y; - - float d = min(sphereDist, planeDist); - return d; -} - -float RayMarch(vec3 ro, vec3 rd) { - float dO=0.; - - for(int i=0; i<MAX_STEPS; i++) { - vec3 p = ro + rd*dO; - float dS = GetDist(p); - dO += dS; - if(dO>MAX_DIST || dS<SURF_DIST) break; - } - - return dO; -} - -vec3 GetNormal(vec3 p) { - float d = GetDist(p); - vec2 e = vec2(.01, 0); - - vec3 n = d - vec3( - GetDist(p-e.xyy), - GetDist(p-e.yxy), - GetDist(p-e.yyx)); - - return normalize(n); -} - -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; -} |
