Add code
This commit is contained in:
parent
29339928d7
commit
aac94e911b
27 changed files with 40373 additions and 49 deletions
5
resources/shaders/algorithms/ray_marching.glsl
Normal file
5
resources/shaders/algorithms/ray_marching.glsl
Normal file
|
@ -0,0 +1,5 @@
|
|||
|
||||
|
||||
RayMarching(vec3 ro, vec3 rd){
|
||||
|
||||
}
|
|
@ -18,9 +18,76 @@ uniform float time;
|
|||
|
||||
out vec3 color;
|
||||
|
||||
void main(){
|
||||
vec2 coord=gl_FragCoord.xy/resolution;
|
||||
coord-=0.5;
|
||||
float d=length(coord);
|
||||
color=vec3(d,1,1);
|
||||
|
||||
#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;
|
||||
}
|
||||
|
|
4
resources/shaders/objects/sphere.glsl
Normal file
4
resources/shaders/objects/sphere.glsl
Normal file
|
@ -0,0 +1,4 @@
|
|||
|
||||
float Sphere(vec3 ray_position, vec3 sphere_position){
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue