aboutsummaryrefslogtreecommitdiff
path: root/src/main/resources/shaders/modules/sdf.glsl
blob: e7222b4dc8f8ce142e4c2a7cc63b62c159e173a2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
float sdf_circle(in vec3 p, in float radius) {
  return length(p) - radius;
}

float sdf_circle(in vec2 p, in float radius) {
  return length(p) - radius;
}

float sdf_plane(in vec3 p, in vec3 normal, in float offset) {
  return dot(p, normal) + offset;
}

float sdf_box(in vec3 p, in vec3 dimens, in float rounding) {
  vec3 q = abs(p) - dimens + rounding;
  return length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0) - rounding;
}

float sdf_box(in vec2 p, in vec2 dimens, in float rounding) {
  vec2 q = abs(p) - dimens + rounding;
  return length(max(q, 0.0)) + min(max(q.x, q.y), 0.0) - rounding;
}

float sd_ellipsoid(vec3 p, vec3 r) {
  float k0 = length(p / r);
  float k1 = length(p / (r * r));
  return k0 * (k0 - 1.0) / k1;
}

float sd_cone(vec3 p, vec2 c) {
  vec2 q = vec2(length(p.xz), -p.y);
  float d = length(q - c * max(dot(q, c), 0.0));
  return d * ((q.x * c.y - q.y * c.x < 0.0) ? -1.0 : 1.0);
}