Improve drawing with segments
This commit is contained in:
parent
fea5ecfcee
commit
9f01a9e236
10 changed files with 89 additions and 200 deletions
|
|
@ -1,8 +1,14 @@
|
|||
struct Settings {
|
||||
size : vec2<f32>,
|
||||
swipePrevious : vec2<f32>,
|
||||
swipeCurrent : vec2<f32>,
|
||||
diffusionRate : f32,
|
||||
decayRate : f32,
|
||||
deltaTime : f32,
|
||||
time : f32,
|
||||
swipeRadius : f32,
|
||||
swipeBlur : f32,
|
||||
isSwipeActive : f32
|
||||
};
|
||||
|
||||
@group(0) @binding(0) var<uniform> settings : Settings;
|
||||
|
|
@ -11,18 +17,30 @@ struct Settings {
|
|||
|
||||
@fragment
|
||||
fn fragment(@location(0) uv: vec2<f32>) -> @location(0) vec4<f32> {
|
||||
let current = textureSample(trailMap, Sampler, uv).rgb;
|
||||
|
||||
let neighbours: vec3<f32> = (
|
||||
textureSample(trailMap, Sampler, uv + vec2<f32>(0, 1) / settings.size).rgb
|
||||
+ textureSample(trailMap, Sampler, uv + vec2<f32>(0, -1) / settings.size).rgb
|
||||
+ textureSample(trailMap, Sampler, uv + vec2<f32>(-1, 0) / settings.size).rgb
|
||||
+ textureSample(trailMap, Sampler, uv + vec2<f32>(1, 0) / settings.size).rgb
|
||||
var current = textureSample(trailMap, Sampler, uv);
|
||||
|
||||
let neighbours: vec4<f32> = (
|
||||
textureSample(trailMap, Sampler, uv + vec2<f32>(0, 1) / settings.size)
|
||||
+ textureSample(trailMap, Sampler, uv + vec2<f32>(0, -1) / settings.size)
|
||||
+ textureSample(trailMap, Sampler, uv + vec2<f32>(-1, 0) / settings.size)
|
||||
+ textureSample(trailMap, Sampler, uv + vec2<f32>(1, 0) / settings.size)
|
||||
);
|
||||
|
||||
return vec4(mix(
|
||||
if (settings.isSwipeActive == 1.0) {
|
||||
let pa = (uv - settings.swipePrevious) * normalize(settings.size);
|
||||
let direction = (settings.swipeCurrent - settings.swipePrevious) * normalize(settings.size);
|
||||
let q = clamp(dot(pa, direction) / dot(direction, direction), 0, 1);
|
||||
let distance = length(pa - direction * q) - settings.swipeRadius;
|
||||
|
||||
if(distance < 0) {
|
||||
let opacity = -distance / settings.swipeBlur;
|
||||
return clamp(vec4(1), current, vec4(1));
|
||||
}
|
||||
}
|
||||
|
||||
return mix(
|
||||
current,
|
||||
neighbours / 4.0,
|
||||
settings.diffusionRate
|
||||
) * (1.0 - settings.decayRate), 1.0);
|
||||
) * (1.0 - settings.decayRate);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue