Tweak code

This commit is contained in:
schmelczerandras 2020-07-25 19:27:21 +02:00
commit edd7d4836e

View file

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