Created
January 26, 2024 08:00
-
-
Save KrabCode/bec8fb0095e7a9934360996c03b657f2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
float prevX = 400; | |
float prevY = 400; | |
float dir = 0; | |
float off; | |
int imgSize = 120; | |
PImage img; | |
float bgColor = 30; | |
void setup(){ | |
fullScreen(P2D); | |
background(bgColor); | |
img = getRandomImage(); | |
} | |
void mousePressed(){ | |
imgSize = floor(random(80, 120)); | |
img = getRandomImage(); | |
off = randomOffset(); | |
} | |
PImage getRandomImage(){ | |
if(random(1) < 0.2){ | |
return loadImage("pleadthink.png"); | |
} | |
return loadImage("https://picsum.photos/"+imgSize+"/"+imgSize+".jpg"); | |
} | |
float randomOffset(){ | |
return random(1000); | |
} | |
void draw(){ | |
float t = frameCount * 0.003; // multiplier constant sets the speed of the simulation | |
float range = width; | |
float x = -range*0.5+range*(noise(t+off)); // find x using noise | |
float y = -range*0.5+range*(noise(t+5123.456+off)); // find y in the same way but with an offset so that the result is not the same as for x | |
float theta = atan2(y - prevY, x - prevX); // angle between previous and current position | |
dir = lerp(dir, theta, 0.01); // smoothed angle | |
prevX = x; // remember the now old values for x and y in a global variable | |
prevY = y; | |
fade(); | |
blendMode(BLEND); | |
translate(width*0.5, height*0.5); | |
int mirrors = 6; | |
for(int i = 0; i < mirrors; i++){ | |
float mAngle = map(i, 0, mirrors, 0, TAU); | |
// draw the thing using 2D transformations to achieve a nice centered rotation | |
pushMatrix(); | |
rotate(mAngle); | |
translate(x,y); | |
rotate(dir); | |
imageMode(CENTER); | |
if(img.width != imgSize){ | |
scale(2); | |
} | |
image(img, 0, 0); | |
popMatrix(); | |
} | |
} | |
void fade(){ | |
if(frameCount % 30 == 0){ | |
blendMode(SUBTRACT); | |
noStroke(); | |
fill(1); | |
rect(0,0,width,height); | |
} | |
blendMode(LIGHTEST); | |
fill(bgColor); | |
rect(0,0,width,height); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment