float lightfield[][] = new float[800][240]; float cx,cy; int range; void setup(){ size(800,240); rectMode(CENTER); noStroke(); float lx, ly,lr; cx=0.0; cy=0.0; range=0; framerate(20); for (int x=0;x<800;x++){ for (int y=0;y<240;y++){ lightfield[int(x)][int(y)]=0; } } for (int i = 0;i<100;i++){ lx=random(800); ly =random(240); lr=random(10.0); for (int x=0;x<800;x++){ for (int y=0;y<240;y++){ lightfield[int(x)][int(y)]+=5000/sq(max(1.0,dist(lx,ly,x,y)-lr)); } } } } void draw(){ updatemouse(); int x1 =constrain(int(cx),0,799); int y1 =constrain(int(cy),0,239); for (float s=1.0;s>0.01;s/=2.0){ for (int i=0-range;i<6+2*range;i++){ for (int j=0-range;j<6+2*range;j++){ colorrect(x1-800*s+i*320*s,y1-800*s+j*320*s,320*s,320*s); } } } for (int i=0-range;i<6+2*range;i++){ for (int j=0-range;j<6+2*range;j++){ monocrect(x1-6.25+i*2.5,y1-6.25+j*2.5,2.5,2.5); } } for (int i=0-range;i<6+2*range;i++){ for (int j=0-range;j<6+2*range;j++){ monocrect(x1-3.125+i*1.25,y1-3.125+j*1.25,1.25,1.25); } } } void colorrect(float mx, float my, float w, float h){ int c=min(255,int(lightfield[int(constrain(mx,0,799))][int(constrain(my,0,239))])); if((c>50)&&(c<70)){ fill(c+100,c,c); } else{ fill(c); } rect(mx,my,w,h); } void monocrect(float mx, float my, float w, float h){ int c=min(255,int(lightfield[int(constrain(mx,0,799))][int(constrain(my,0,239))])); fill(c); rect(mx,my,w,h); } void updatemouse(){ cx=0.9*cx+0.1*mouseX; cy=0.9*cy+0.1*mouseY; }