function setup() {
let canvas = createCanvas(600, 600, WEBGL);
canvas.parent('animation-holder');
}
function draw() {
background(0, 0, 50);
directionalLight(255, 255, 255, 0, 0, -1);
drawFractal(0, 0, 200, 6);
drawFractal(150, -150, 120, 5);
drawFractal(-200, 100, 80, 4);
push();
translate(-100, 200);
rotateX(frameCount * 0.01);
rotateY(frameCount * 0.02);
fill(200, 200, 0);
cylinder(30, 80);
pop();
push();
translate(100, -250);
rotateX(frameCount * 0.015);
rotateY(frameCount * 0.025);
fill(200, 200, 0);
cylinder(25, 60);
pop();
// Add Van Gogh-style starry night in the back with more waves
push();
translate(0, 0, -300);
drawStarryNight(0, 0, 400);
pop();
}
function drawFractal(x, y, size, level) {
if(level > 0) {
push();
translate(x, y);
rotateX(frameCount * 0.01);
rotateY(frameCount * 0.02);
if (level % 2 == 0) {
fill(255, 200, 0);
} else {
fill(200, 200, 0);
}
box(size);
level--;
drawFractal(0, size/2, size/2, level);
drawFractal(0, -size/2, size/2, level);
drawFractal(size/2, 0, size/2, level);
drawFractal(-size/2, 0, size/2, level);
pop();
}
}
function drawStarryNight(x, y, size) {
push();
translate(x, y);
// Swirling night sky
for (let i = 0; i < 500; i++) {
let angle = i * 0.1;
let radius = size * 0.005 * i;
let starX = radius * cos(angle);
let starY = radius * sin(angle);
let starSize = random(1, 3);
fill(255, 255, 0);
ellipse(starX, starY, starSize, starSize);
}
// Multiple rolling wavy cypress trees
stroke(0, 100, 0);
strokeWeight(5);
fill(0, 50, 0);
for (let j = 0; j < 5; j++) {
push();
translate(j * size/6 - size/3, 0);
beginShape();
let angleStep = 180 / 30;
for (let i = 0; i <= 30; i++) {
let angle = i * angleStep;
let treeX = size/3 * cos(angle + j * 30 + frameCount * 0.02);
let treeY = size/15 * i - size/2;
curveVertex(treeX, treeY);
}
endShape();
pop();
}
pop();
}