Tweak code
This commit is contained in:
parent
b6bef3c77d
commit
edd7d4836e
1 changed files with 36 additions and 45 deletions
|
|
@ -3,47 +3,35 @@
|
|||
precision mediump float;
|
||||
|
||||
#define INFINITY 200.0
|
||||
#define LINE_COUNT 50
|
||||
#define LINE_COUNT 30
|
||||
#define CAVE_COLOR vec3(0.36, 0.38, 0.76)
|
||||
#define AIR_COLOR vec3(0.7)
|
||||
|
||||
// start, end - start
|
||||
uniform vec2[LINE_COUNT * 2] lines;
|
||||
// startRadius, endRadois
|
||||
uniform float[LINE_COUNT * 2] radii;
|
||||
|
||||
float lineDistance(
|
||||
in vec2 target,
|
||||
in vec2 start,
|
||||
in vec2 end,
|
||||
in float radiusFrom,
|
||||
in float radiusTo
|
||||
) {
|
||||
vec2 pa = target - start, ba = end - start;
|
||||
float baLength = length(ba);
|
||||
float h = clamp(dot(pa / baLength, ba / baLength), 0.0, 1.0);
|
||||
return length(pa - ba * h) - mix(radiusFrom, radiusTo, h);
|
||||
}
|
||||
|
||||
float getDistance(in vec2 target) {
|
||||
float minDistance = INFINITY;
|
||||
|
||||
for (int i = 0; i < LINE_COUNT; i++) {
|
||||
vec2 start = lines[2 * i];
|
||||
vec2 end = lines[2 * i + 1];
|
||||
float rFrom = radii[2 * i];
|
||||
float rTo = radii[2 * i + 1];
|
||||
minDistance = min(minDistance, lineDistance(target, start, end, rFrom, rTo));
|
||||
}
|
||||
|
||||
return -minDistance;
|
||||
}
|
||||
|
||||
in vec2 worldCoordinates;
|
||||
out vec4 fragmentColor;
|
||||
|
||||
void main() {
|
||||
float distance = getDistance(worldCoordinates);
|
||||
const vec3 caveColor = vec3(0.36, 0.38, 0.76);
|
||||
const vec3 airColor = vec3(1.0);
|
||||
float minDistance = INFINITY;
|
||||
|
||||
for (int i = 0; i < LINE_COUNT; i++) {
|
||||
vec2 pa = worldCoordinates - lines[2 * i];
|
||||
vec2 ba = lines[2 * i + 1];
|
||||
float baLength = length(ba);
|
||||
float h = clamp(dot(pa / baLength, ba / baLength), 0.0, 1.0);
|
||||
float lineDistance = distance(pa, ba * h) - mix(radii[2 * i], radii[2 * i + 1], h);
|
||||
|
||||
minDistance = min(minDistance, lineDistance);
|
||||
}
|
||||
|
||||
float distance = -minDistance;
|
||||
|
||||
fragmentColor = vec4(
|
||||
mix(caveColor, airColor, clamp(distance, 0.0, 1.0)),
|
||||
mix(CAVE_COLOR, AIR_COLOR, clamp(distance, 0.0, 1.0)),
|
||||
distance / 32.0
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue