windgl icon indicating copy to clipboard operation
windgl copied to clipboard

Particle trails

Open timeroute opened this issue 6 years ago • 6 comments

how can i draw particle trails? just like the demo of mapbox/webgl-wind.

timeroute avatar Jun 20 '19 18:06 timeroute

At the moment this isn't supported.

In order to do that ala mapbox/webgl-wind, you need to render the output to a framebuffer and fade it out progressively over time. This has the following negative consequences in a full featured implementation:

  1. The output is completely wrong when panning/zooming, so you have to throw it out. This leads to a somewhat disconcerting effect where every time you move the map, all the particle trails disappear only to show up a few seconds later.
  2. This limits the speed of the particle: it cannot travel more than a single pixel per frame, otherwise the particle trail develops holes, breaking the visual effect.

In the longer term we can develop some solutions to this. My thoughts went something like this:

  1. choose a number of frames that we will have a particle trail for, call it n.
  2. allocate n + 1 textures to hold particle positions.
  3. on a normal frame, compute the current position based on frame n, shift the textures around one position and store it frame n
    • on a frame where a zoom/pan has occurred, recompute the position for all n. This will be slow, so this needs to put a limit on the size of n
  4. When drawing to the screen, draw in line mode, drawing a segment of the line between pairs of frames.

gampleman avatar Jun 21 '19 10:06 gampleman

At the moment this isn't supported.

In order to do that ala mapbox/webgl-wind, you need to render the output to a framebuffer and fade it out progressively over time. This has the following negative consequences in a full featured implementation:

  1. The output is completely wrong when panning/zooming, so you have to throw it out. This leads to a somewhat disconcerting effect where every time you move the map, all the particle trails disappear only to show up a few seconds later.
  2. This limits the speed of the particle: it cannot travel more than a single pixel per frame, otherwise the particle trail develops holes, breaking the visual effect.

In the longer term we can develop some solutions to this. My thoughts went something like this:

  1. choose a number of frames that we will have a particle trail for, call it n.

  2. allocate n + 1 textures to hold particle positions.

  3. on a normal frame, compute the current position based on frame n, shift the textures around one position and store it frame n

    • on a frame where a zoom/pan has occurred, recompute the position for all n. This will be slow, so this needs to put a limit on the size of n
  4. When drawing to the screen, draw in line mode, drawing a segment of the line between pairs of frames.

thanks @gampleman for your work up until now on this, one question:

would this feature require to continue with webgl implementation?

Robert-OP avatar Aug 26 '20 14:08 Robert-OP

would this feature require to continue with webgl implementation?

Not totally sure what you mean by that?

gampleman avatar Aug 26 '20 14:08 gampleman

would this feature require to continue with webgl implementation?

Not totally sure what you mean by that?

so, in order to implement the particle trails feature is it needed for one to know more how to work with webgl?

Robert-OP avatar Aug 27 '20 07:08 Robert-OP

Yes. I'm afraid that to do anything interesting inside this repo fairly decent knowledge of WebGL is required.

gampleman avatar Aug 27 '20 08:08 gampleman

thank you @gampleman - would you be interested to develop this feature forward if sponsored?

Robert-OP avatar Aug 27 '20 09:08 Robert-OP