// OPENGL Voodoo for additive rendering import processing.opengl.*; import javax.media.opengl.*; PGraphicsOpenGL pgl; GL gl; // PImage glowKernel; // generated glow kernel for each particle BeadSystem[] bs; int NUMANCHORS; // number of centers int NUMCHAINS; // number of bead systems per center int NUMBEADS; // number of beads per bead system void setup(){ size(800,540,OPENGL); hint( ENABLE_OPENGL_4X_SMOOTH ); background(0); NUMANCHORS=10; NUMCHAINS=6; NUMBEADS=10; //glow kernel float glowKernelWidth=100f;// glow core size parameter float glowKernelDecayPower=2.2f;// glow core decay power int reqGlowKernelSize =4*(int)pow(100f*glowKernelWidth,1f/glowKernelDecayPower);// required image size to accomodate the glow kernel println(reqGlowKernelSize+1); glowKernel=createImage(reqGlowKernelSize, reqGlowKernelSize, RGB); for(int i=0; i < reqGlowKernelSize; i++) { for(int j=0; j < reqGlowKernelSize; j++) { float bri=255.999999f*glowKernelWidth/(glowKernelWidth+pow(dist(i,j,reqGlowKernelSize/2,reqGlowKernelSize/2),glowKernelDecayPower));// radial symmetric decreasing function glowKernel.pixels[i+reqGlowKernelSize*j] = color(bri); } } bs=new BeadSystem[NUMANCHORS*NUMCHAINS]; for(int i=0;i=TWO_PI) angleOffset-=TWO_PI; while(angleOffset<0f) angleOffset+=TWO_PI; _x=center.x-radius*sin(angleOffset); _y=center.y+radius*cos(angleOffset); } void drawArc(){ float angle; beginShape(); for(int i=0; i ((BeadOnArc)other).radius) return AFTER; return EQUAL; } }