xxxxxxxxxx
let camera;
let palette = [];
let layers = [];
function setup() {
createCanvas(800, 800, WEBGL);
colorMode(HSB, 360, 100, 100, 100);
angleMode(DEGREES);
camera = createCamera();
ortho(-width / 2, width / 2, -height / 2, height / 2, -5000, 5000);
while (palette.length < 5) {
palette = shuffle(chromotome.get().colors);
}
}
function draw() {
background(0, 0, 90);
let g = createGraphics(width, height);
g.angleMode(DEGREES);
let offset = 0;
let x = offset;
let y = offset;
let d = g.width - offset * 2;
let minD = d / 10;
push();
translate(0, 0, 0);
g.clear();
drawGradientShape(g, g.width / 2, g.height / 2, g.width, true);
texture(g);
noStroke();
plane(width);
pop();
camera.setPosition(0, -400, 500);
camera.lookAt(0, 0, 0);
rotateY(-45);
for (let e = 2; e > 0; e -= 2) {
push();
scale(e);
push();
translate(200, -200, 0);
rotateX(180);
g.clear();
// drawGradientShape(g, g.width / 2, g.height / 2, g.width, true);
separateGrid(x, y, d, minD, g);
texture(g);
noStroke();
plane(400);
pop();
push();
translate(0, -200, 200);
rotateY(-90);
g.clear();
// drawGradientShape(g, g.width / 2, g.height / 2, g.width, true);
separateGrid(x, y, d, minD, g);
texture(g);
noStroke();
plane(400);
pop();
push();
translate(200, 0, 200);
rotateX(90);
g.clear();
// drawGradientShape(g, g.width / 2, g.height / 2, g.width, true);
separateGrid(x, y, d, minD, g);
texture(g);
noStroke();
plane(400);
pop();
pop();
}
noLoop();
}
function separateGrid(x, y, d, minD, g) {
let sep = int(random(1, 6));
let w = d / sep;
for (let j = 0; j < sep; j++) {
for (let i = 0; i < sep; i++) {
let nx = x + i * w;
let ny = y + j * w;
if (random() < 0.9 && w > minD) {
separateGrid(nx, ny, w, minD, g);
} else {
drawGradientShape(g, nx + w / 2, ny + w / 2, w);
}
}
}
}
function drawGradientShape(g, x, y, d, bool = false) {
g.rectMode(CENTER);
g.noStroke();
g.push();
g.translate(x, y);
if (bool) {
g.fill(0, 0, 100, 50);
g.rect(0, 0, d, d);
}
g.drawingContext.shadowColor = color(0, 0, 0, 33);
g.drawingContext.shadowBlur = d / 5;
let c = color(random(palette));
c.setAlpha(80);
// translate(d/2,d/2);
g.rotate((int(random(4)) * 360) / 4);
g.translate(-d / 2, -d / 2);
g.fill(c);
if (bool) {
} else {
switch (int(random(14))) {
case 0:
g.arc(0, 0, d * 2, d * 2, 0, 90);
break;
case 1:
g.triangle(0, 0, d, 0, 0, d);
break;
case 2:
g.rectMode(CORNER);
g.rect(0, 0, d, d);
break;
case 3:
g.rectMode(CORNER);
g.rect(0, 0, d / 2, d);
break;
case 4:
g.circle(d / 2, d / 2, d);
break;
case 5:
g.triangle(0, 0, d / 2, 0, 0, d);
g.triangle(d, d, d / 2, d, d, 0);
break;
case 6:
g.triangle(0, 0, d / 2, 0, 0, d);
g.triangle(d / 2, 0, d, 0, d / 2, d);
break;
case 7:
g.triangle(0, 0, 0, d, d / 2, d / 2);
g.triangle(d / 2, 0, d / 2, d, d, d / 2);
break;
case 8:
g.triangle(0, 0, 0, d, d / 2, d / 2);
g.triangle(d, 0, d, d, d/2, d / 2);
break;
case 9:
g.rectMode(CORNER);
g.rect(0, 0, d / 2, d);
g.triangle(d, d, d / 2, d, d, 0);
break;
case 10:
g.rectMode(CORNER);
g.rect(0, 0, d / 2, d);
g.triangle(d / 2, 0, d, 0, d / 2, d);
break;
case 11:
g.rectMode(CORNER);
g.rect(0, 0, d / 2, d);
g.triangle(d / 2, 0, d / 2, d, d, d / 2);
break;
case 12:
g.rectMode(CORNER);
g.rect(0, 0, d / 2, d);
g.triangle(d, 0, d, d, d, d / 2);
break;
case 13:
g.rectMode(CORNER);
g.rect(0, 0, d / 2, d);
if(random()<.5){
g.circle(d * 3/4,d * 1/4,d/2);
}else{
g.push();
g.translate(d * 3/4,d * 1/4);
g.rotate(int(random(4)) * 360/4);
g.arc(-d/4,-d/4,d,d,0,90);
g.pop();
}
if(random()<.5){
g.circle(d * 3/4,d * 3/4,d/2);
}else{
g.push();
g.translate(d * 3/4,d * 3/4);
g.rotate(int(random(4)) * 360/4);
g.arc(-d/4,-d/4,d,d,0,90);
g.pop();
}
break;
}
}
g.drawingContext.shadowColor = color(0, 0, 100, 0);
g.drawingContext.clip();
g.translate(d / 2, d / 2);
let colors = shuffle(palette.concat());
g.blendMode(BURN);
for (let i = 0; i < 4; i++) {
g.rotate(90);
let gradient = g.drawingContext.createRadialGradient(
-d / 2,
-d / 2,
0,
-d / 2,
-d / 2,
d * 5
);
gradient.addColorStop(0, colors[i % colors.length]);
gradient.addColorStop(1 / 4, color(0, 0, 100, 0));
g.noStroke();
g.fill(0, 0, 100, 0);
g.drawingContext.fillStyle = gradient;
g.circle(-d / 2, -d / 2, d * 2);
}
g.blendMode(BLEND);
g.pop();
}