An addon for the C++ creative coding framework OpenFrameworks of the Jump Flooding algorithm implemented with GLSL shaders. The Jump Flooding algorithm is a method of constructing Voronoi diagrams by encoding the distance and ID of the closest seed in a texture for every pixel. This addon follows the description of implementation by this article by Ryan Kaplan.
Using ofxJFA is as simple as passing an ofxTexture
to the update()
method of
an instance of the ofxJFA
class. The class then does 11 passes of Jump
Flooding, writing the output each time to an RGBA32F
texture and returns it in
the end.
//ofApp.h
#include "ofxJFA.h"
ofxJfa jfa;
//ofApp.cpp
//width and height of source
jfa.init(1280,720);
//ofApp.cpp
//pass in source texture
jfa.update(sourceTexture);
The output of this addon is a JFA encoding, where the XY coordinates to the nearest seed is recorded in the red and green channels of the texture and the distance to it in the blue channel.
The texture can then be used in another shader for other purposes.
//ofApp.cpp
// passing the texture into another shader
shader.setUniformTexture("jfa", jfa.getTexture(), 0);
shader.setUniformTexture("src", sourceTexture(), 1);
//shader.frag
//get encoded data
vec4 loc = texture(jfa, gl_FragCoord.xy);
//use encoded data to get color data from source
gl_FragColor = texture(src, loc.xy);