X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=sdr%2Fraydungeon.p.glsl;h=c10be1810c7d5902a6f94526e46a663549bc535c;hb=135d8d8a02341719302158e7beade95fae2daf95;hp=8a66df71185e4a86e0fd313ef8efb5569825fba3;hpb=f42df7ecfc0f8c1425baf89c88721ca878ee1de1;p=raydungeon diff --git a/sdr/raydungeon.p.glsl b/sdr/raydungeon.p.glsl index 8a66df7..c10be18 100644 --- a/sdr/raydungeon.p.glsl +++ b/sdr/raydungeon.p.glsl @@ -1,5 +1,117 @@ +uniform float aspect; +uniform mat4 matrix; +uniform mat3 dirmatrix; + +#define DIST_THRES 1e-3 +#define MAX_ITER 250 +#define MAX_STEP 1.0 + +vec3 raymarch(inout vec3 p, in vec3 dir, out float depth); +vec3 shade(in vec3 p, in vec3 dir, in float dist, in float total_dist); +vec3 backdrop(in vec3 dir); +float eval_sdf(in vec3 p); +vec3 eval_grad(in vec3 p, float dist); +vec3 primray(in vec2 uv, out vec3 org); + +float boxdist(in vec3 p, in vec3 b); +float sphdist(in vec3 p, in vec3 sp, in float srad); + void main() { - vec3 col = vec3(gl_TexCoord[0].st, 1.0); - gl_FragColor = vec4(col, 1.0); + vec2 uv = gl_TexCoord[0].st; + vec3 rorg; + vec3 rdir = primray(uv, rorg); + float depth; + + gl_FragColor.rgb = raymarch(rorg, rdir, depth); + gl_FragColor.a = 1.0; + + vec4 projp = gl_ProjectionMatrix * vec4(0.0, 0.0, -depth, 1.0); + float zval = projp.z / projp.w; + + gl_FragDepth = zval; +} + +vec3 raymarch(inout vec3 p, in vec3 dir, out float depth) +{ + float d, total_d = 0.0; + + for(int i=0; i