|
|
@ -5,25 +5,26 @@ files.builtin = {
|
|
5
|
5
|
void main() {
|
|
6
|
6
|
gl_FragColor = vec4(gl_FragCoord.xy / iResolution, blue, 1.0);
|
|
7
|
7
|
}`,
|
|
8
|
|
"default.frag": `const int MaximumRaySteps = 150;
|
|
9
|
|
const float MinimumDistance = 0.0001;
|
|
|
8
|
"default.frag": `//#include "includes/sphere-tracer.frag"
|
|
|
9
|
//#include "includes/iq-primitives.frag"
|
|
|
10
|
//#include "includes/cupe-primitives.frag"
|
|
10
|
11
|
|
|
11
|
|
float DistanceEstimator(vec3 pos);
|
|
|
12
|
uniform vec3 offset; //#slider[(0.0,10.0,20.0),(0.0,10.0,20.0),(0.0,2.5,20.0)]
|
|
12
|
13
|
|
|
13
|
|
float trace(vec3 from, vec3 direction) {
|
|
14
|
|
float totalDistance = 0.0;
|
|
15
|
|
int stepsDone = 0;
|
|
16
|
|
for (int steps = 0; steps < MaximumRaySteps; steps++) {
|
|
17
|
|
vec3 p = from + totalDistance * direction;
|
|
18
|
|
float distance = DistanceEstimator(p);
|
|
19
|
|
totalDistance += distance;
|
|
20
|
|
stepsDone = steps;
|
|
21
|
|
if (distance < MinimumDistance) break;
|
|
22
|
|
}
|
|
23
|
|
return 1.0-float(stepsDone)/float(MaximumRaySteps);
|
|
|
14
|
float DistanceEstimator(vec3 pos) {
|
|
|
15
|
pMod1(pos.x, offset.x);
|
|
|
16
|
pMod1(pos.y, offset.y);
|
|
|
17
|
pMod1(pos.z, offset.z + sin(iGlobalTime));
|
|
|
18
|
//return sphere(pos);
|
|
|
19
|
//return min(sphere(vec3(pos.x, pos.y - 0.5, pos.z), 0.75),
|
|
|
20
|
// udBox(pos, vec3(1.0, 0.3, 1.0)));
|
|
|
21
|
return min(max(-sphere(pos), udBox(pos, vec3(0.75))),
|
|
|
22
|
sphere(pos, 0.05 + 0.25 * (1.0 + sin(iGlobalTime * 0.5)*0.5)));
|
|
24
|
23
|
}
|
|
25
|
24
|
|
|
26
|
|
float sphere(vec3 pos) {
|
|
|
25
|
//#include "includes/default-main.frag"
|
|
|
26
|
`,
|
|
|
27
|
"includes/iq-primitives.frag": `float sphere(vec3 pos) {
|
|
27
|
28
|
return length(pos) - 1.0;
|
|
28
|
29
|
}
|
|
29
|
30
|
|
|
|
@ -34,28 +35,31 @@ float sphere(vec3 pos, float size) {
|
|
34
|
35
|
float udBox( vec3 p, vec3 b ) {
|
|
35
|
36
|
return length(max(abs(p)-b,0.0));
|
|
36
|
37
|
}
|
|
37
|
|
|
|
38
|
|
float pMod1(inout float p, float size) {
|
|
|
38
|
`,
|
|
|
39
|
"includes/cupe-primitives.frag": `float pMod1(inout float p, float size) {
|
|
39
|
40
|
float halfsize = size * 0.5;
|
|
40
|
41
|
float c = floor((p + halfsize)/size);
|
|
41
|
42
|
p = mod(p+halfsize, size)-halfsize;
|
|
42
|
43
|
return c;
|
|
43
|
|
}
|
|
44
|
|
|
|
45
|
|
uniform vec3 offset; //#slider[(0.0,10.0,20.0),(0.0,10.0,20.0),(0.0,2.5,20.0)]
|
|
|
44
|
}`,
|
|
|
45
|
"includes/sphere-tracer.frag": `const int MaximumRaySteps = 150;
|
|
|
46
|
const float MinimumDistance = 0.0001;
|
|
46
|
47
|
|
|
47
|
|
float DistanceEstimator(vec3 pos) {
|
|
48
|
|
pMod1(pos.x, offset.x);
|
|
49
|
|
pMod1(pos.y, offset.y);
|
|
50
|
|
pMod1(pos.z, offset.z + sin(iGlobalTime));
|
|
51
|
|
//return sphere(pos);
|
|
52
|
|
//return min(sphere(vec3(pos.x, pos.y - 0.5, pos.z), 0.75),
|
|
53
|
|
// udBox(pos, vec3(1.0, 0.3, 1.0)));
|
|
54
|
|
return min(max(-sphere(pos), udBox(pos, vec3(0.75))),
|
|
55
|
|
sphere(pos, 0.05 + 0.25 * (1.0 + sin(iGlobalTime * 0.5)*0.5)));
|
|
56
|
|
}
|
|
|
48
|
float DistanceEstimator(vec3 pos);
|
|
57
|
49
|
|
|
58
|
|
mat3 setCamera( in vec3 ro, in vec3 ta, float cr ) {
|
|
|
50
|
float trace(vec3 from, vec3 direction) {
|
|
|
51
|
float totalDistance = 0.0;
|
|
|
52
|
int stepsDone = 0;
|
|
|
53
|
for (int steps = 0; steps < MaximumRaySteps; steps++) {
|
|
|
54
|
vec3 p = from + totalDistance * direction;
|
|
|
55
|
float distance = DistanceEstimator(p);
|
|
|
56
|
totalDistance += distance;
|
|
|
57
|
stepsDone = steps;
|
|
|
58
|
if (distance < MinimumDistance) break;
|
|
|
59
|
}
|
|
|
60
|
return 1.0-float(stepsDone)/float(MaximumRaySteps);
|
|
|
61
|
}`,
|
|
|
62
|
"includes/default-main.frag": `mat3 setCamera( in vec3 ro, in vec3 ta, float cr ) {
|
|
59
|
63
|
vec3 cw = normalize(ta-ro);
|
|
60
|
64
|
vec3 cp = vec3(sin(cr), cos(cr),0.0);
|
|
61
|
65
|
vec3 cu = normalize( cross(cw,cp) );
|