making things glow like in the metaball example
in
Core Library Questions
•
2 years ago
can someone explain how the glow effect in the metaball example works? i've been through it again and again but i can't seem to make heads nor tails of it.
- /**
- * Metaball Demo Effect
- * by luis2048.
- *
- * Organic-looking n-dimensional objects. The technique for rendering
- * metaballs was invented by Jim Blinn in the early 1980s. Each metaball
- * is defined as a function in n-dimensions.
- */
- int numBlobs = 3;
- int[] blogPx = { 0, 90, 90 };
- int[] blogPy = { 0, 120, 45 };
- // Movement vector for each blob
- int[] blogDx = { 1, 1, 1 };
- int[] blogDy = { 1, 1, 1 };
- PGraphics pg;
- int[][] vy,vx;
- void setup() {
- size(640, 360);
- pg = createGraphics(160, 90, P2D);
- vy = new int[numBlobs][pg.height];
- vx = new int[numBlobs][pg.width];
- }
- void draw() {
- for (int i=0; i<numBlobs; ++i) {
- blogPx[i]+=blogDx[i];
- blogPy[i]+=blogDy[i];
- // bounce across screen
- if (blogPx[i] < 0) {
- blogDx[i] = 1;
- }
- if (blogPx[i] > pg.width) {
- blogDx[i] = -1;
- }
- if (blogPy[i] < 0) {
- blogDy[i] = 1;
- }
- if (blogPy[i] > pg.height) {
- blogDy[i]=-1;
- }
- for (int x = 0; x < pg.width; x++) {
- vx[i][x] = int(sq(blogPx[i]-x));
- }
- for (int y = 0; y < pg.height; y++) {
- vy[i][y] = int(sq(blogPy[i]-y));
- }
- }
- // Output into a buffered image for reuse
- pg.beginDraw();
- pg.loadPixels();
- for (int y = 0; y < pg.height; y++) {
- for (int x = 0; x < pg.width; x++) {
- int m = 1;
- for (int i = 0; i < numBlobs; i++) {
- // Increase this number to make your blobs bigger
- m += 60000/(vy[i][y] + vx[i][x]+1);
- }
- pg.pixels[x+y*pg.width] = color(0, m+x, (x+m+y)/2);
- }
- }
- pg.updatePixels();
- pg.endDraw();
- // Display the results
- image(pg, 0, 0, width, height);
- }
1