Add better color output

This commit is contained in:
schmelczerandras 2020-09-24 21:51:26 +02:00
parent 98d1fc9ca2
commit 7d2c74d6a8
6 changed files with 58 additions and 38 deletions

View file

@ -9,17 +9,15 @@ export class Circle extends Drawable {
uniform vec2 circleCenters[CIRCLE_COUNT];
uniform float circleRadii[CIRCLE_COUNT];
void circleMinDistance(inout float minDistance, inout float color) {
float myMinDistance = maxMinDistance;
for (int i = 0; i < CIRCLE_COUNT; i++) {
float dist = distance(circleCenters[i], position) - circleRadii[i];
myMinDistance = min(myMinDistance, dist);
}
minDistance = min(minDistance, myMinDistance);
color = mix(1.0 / {paletteSize}, color, step(
distanceNdcPixelSize + SURFACE_OFFSET,
myMinDistance
));
float circleMinDistance(vec2 target, out float colorIndex) {
colorIndex = 2.0;
float minDistance = 1000.0;
for (int i = 0; i < CIRCLE_COUNT; i++) {
float dist = distance(circleCenters[i], target) - circleRadii[i];
minDistance = min(minDistance, dist);
}
return minDistance;
}
`,
distanceFunctionName: 'circleMinDistance',

View file

@ -12,12 +12,13 @@ export class InvertedTunnel extends Drawable {
uniform vec2 toFromDeltas[INVERTED_TUNNEL_COUNT];
uniform float fromRadii[INVERTED_TUNNEL_COUNT];
uniform float toRadii[INVERTED_TUNNEL_COUNT];
void invertedTunnelMinDistance(inout float minDistance, inout float color) {
float myMinDistance = -minDistance;
float invertedTunnelMinDistance(vec2 target, out float colorIndex) {
float minDistance = 1000.0;
for (int i = 0; i < INVERTED_TUNNEL_COUNT; i++) {
vec2 targetFromDelta = position - froms[i];
vec2 targetFromDelta = target - froms[i];
float h = clamp(
dot(targetFromDelta, toFromDeltas[i])
/ dot(toFromDeltas[i], toFromDeltas[i]),
@ -30,14 +31,10 @@ export class InvertedTunnel extends Drawable {
targetFromDelta, toFromDeltas[i] * h
);
myMinDistance = min(myMinDistance, currentDistance);
minDistance = min(minDistance, currentDistance);
}
color = mix(0.0, color, step(
distanceNdcPixelSize + SURFACE_OFFSET,
-myMinDistance
));
minDistance = -myMinDistance;
return -minDistance;
}
`,
distanceFunctionName: 'invertedTunnelMinDistance',

View file

@ -12,11 +12,13 @@ export class Tunnel extends Drawable {
uniform vec2 toFromDeltas[TUNNEL_COUNT];
uniform float fromRadii[TUNNEL_COUNT];
uniform float toRadii[TUNNEL_COUNT];
void tunnelMinDistance(inout float minDistance, inout float color) {
float myMinDistance = minDistance;
float tunnelMinDistance(vec2 target, out float colorIndex) {
colorIndex = 1.0;
float minDistance = 1000.0;
for (int i = 0; i < TUNNEL_COUNT; i++) {
vec2 targetFromDelta = position - froms[i];
vec2 targetFromDelta = target - froms[i];
float h = clamp(
dot(targetFromDelta, toFromDeltas[i])
@ -29,15 +31,11 @@ export class Tunnel extends Drawable {
) + distance(
targetFromDelta, toFromDeltas[i] * h
);
myMinDistance = min(myMinDistance, currentDistance);
minDistance = min(minDistance, currentDistance);
}
color = mix(2.0 / {paletteSize}, color, step(
distanceNdcPixelSize + SURFACE_OFFSET,
myMinDistance
));
minDistance = min(minDistance, myMinDistance);
return minDistance;
}
`,
distanceFunctionName: 'tunnelMinDistance',