You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
in shader toy the normal seem to update properly when rotating the cube, however not in the GSLS canvas version. Anyone has an idea on what could be happening ?
I am new to shader and 3d computer graphic so I might be missing something obvious.
#version 300 es
precision lowp float;
uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;
out vec4 fragColor;
#define MAX_STEPS 200
#define MAX_DIST 100.
#define SURF_DIST .001
mat2 Rot(float a) {
float s = sin(a);
float c = cos(a);
return mat2(c, -s, s, c);
}
float smin( float a, float b, float k ) {
float h = clamp( 0.5+0.5*(b-a)/k, 0., 1. );
return mix( b, a, h ) - k*h*(1.0-h);
}
float sdCapsule(vec3 p, vec3 a, vec3 b, float r) {
vec3 ab = b-a;
vec3 ap = p-a;
float t = dot(ab, ap) / dot(ab, ab);
t = clamp(t, 0., 1.);
vec3 c = a + t*ab;
return length(p-c)-r;
}
float sdCylinder(vec3 p, vec3 a, vec3 b, float r) {
vec3 ab = b-a;
vec3 ap = p-a;
float t = dot(ab, ap) / dot(ab, ab);
t = clamp(t, 0., 1.);
vec3 c = a + t*ab;
float x = length(p-c)-r;
float y = (abs(t-.5)-.5)*length(ab);
float e = length(max(vec2(x, y), 0.));
float i = min(max(x, y), 0.);
return e+i;
}
float sdTorus(vec3 p, vec2 r) {
float x = length(p.xz)-r.x;
return length(vec2(x, p.y))-r.y;
}
float sdBox(vec3 p, vec3 s) {
p = abs(p)-s;
return length(max(p, 0.))+min(max(p.x, max(p.y, p.z)), 0.);
}
float GetDist(vec3 p) {
float plane = p.y;
float box = sdBox(p-vec3(0,1,0), vec3(1));
float d = min(plane, box);
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(.001, 0);
vec3 n = d - vec3(
GetDist(p-e.xyy),
GetDist(p-e.yxy),
GetDist(p-e.yyx));
return normalize(n);
}
vec3 R(vec2 uv, vec3 p, vec3 l, float z) {
vec3 f = normalize(l-p),
r = normalize(cross(vec3(0,1,0), f)),
u = cross(f,r),
c = p+f*z,
i = c + uv.x*r + uv.y*u,
d = normalize(i-p);
return d;
}
void main( )
{
vec2 uv = (gl_FragCoord.xy * 2. - u_resolution.xy) / u_resolution.y;
vec2 m = (u_mouse.xy * 2. - u_resolution.xy) / u_resolution.y;
vec3 col = vec3(0);
vec3 ro = vec3(0, 4, -5);
ro.yz *= Rot(-m.y*3.14+1.);
ro.xz *= Rot(-m.x*6.2831);
vec3 rd = R(uv, ro, vec3(0,1,0), 1.);
float d = RayMarch(ro, rd);
if(d<MAX_DIST) {
vec3 p = ro + rd * d;
vec3 norm = GetNormal(p);
col = norm;
}
fragColor = vec4(col,1.0);
}
The text was updated successfully, but these errors were encountered:
I have the following shader, which is ported from this shadertoy:
https://www.shadertoy.com/view/Mfy3Wt
in shader toy the normal seem to update properly when rotating the cube, however not in the GSLS canvas version. Anyone has an idea on what could be happening ?
I am new to shader and 3d computer graphic so I might be missing something obvious.
The text was updated successfully, but these errors were encountered: