xxxxxxxxxx
91
function getPixelID(x, y, g) {
let _density;
if (g == null) _density = pixelDensity();
else _density = g.pixelDensity();
const idx = 4 * _density * (int(y) * _density * width + int(x));
return idx;
}
let startColor, endColor;
let border, max_dist;
function setup() {
createCanvas(1000, 1000);
border = width * 0.05;
pixelDensity(1);
background(20);
startColor = color(random(255), random(255), random(255));
endColor = color(
255 - red(startColor),
255 - green(startColor),
255 - blue(startColor)
);
noiseDetail(8, 0.75);
y = border;
max_dist = dist(border, border, width - border, height - border);
}
let y;
let step = 0;
let r = 1;
// let t = 0;
function draw() {
if (step == 0) {
loadPixels();
for (let x = border; x < width - border; x++) {
let d = dist(x, y, width - border, height - border);
let m = map(d / max_dist, 1.0, 0.0, 0.0, 1.0);
let c = lerpColor(startColor, endColor, m);
let idx = getPixelID(x, y, null);
pixels[idx] = red(c);
pixels[idx + 1] = green(c);
pixels[idx + 2] = blue(c);
}
updatePixels();
y++;
if (y > height - border) {
noFill();
stroke(220);
rect(border, border, width - 2 * border, height - 2 * border);
step++;
}
} else if (step == 1) {
push();
translate(width / 2, height / 2);
// let c = color(map(r, 1, width/3, 255, 20));
let c = lerpColor(endColor, startColor, map(r, 1, width/3, 0.0, 1.0));
noStroke();
for (let t = 0; t < TWO_PI; t += TWO_PI / random(32, 512)) {
let x = r * cos(t);
let y = r * sin(t);
for (let _r = 5; _r < 50; _r+= random(0.5, 2)) {
let a = map(_r, 5, 50, 10, 2);
c.setAlpha(a);
fill(c);
ellipse(x+random(-5,5), y+random(-5,5), _r+random(-2,2),_r+random(-2,2));
}
// circle(x, y, 5);
}
translate(-width / 2, -height / 2);
pop();
r += 5;
if (r > width / 3) {
step++;
}
} else {
console.log("done");
noLoop();
}
}