Quellcode durchsuchen

split up the default files into (quite a few) small parts

e.g. the primitives from different sources (iq, cupe) have their own
includes now, as does the sphere tracer and the camera from iq's
"raymarching primitives" on shadertoy.
Lucas Stadler vor 10 Jahren
Ursprung
Commit
4cb58c6ae3
1 geänderte Dateien mit 35 neuen und 31 gelöschten Zeilen
  1. 35 31
      glsl/defaultFiles.js

+ 35 - 31
glsl/defaultFiles.js

@ -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) );