let ma; function setup() { createCanvas(windowWidth, windowHeight, WEBGL); ma = atan(cos(QUARTER_PI)); } function draw() { background(100); rotateX(-ma); rotateY(-QUARTER_PI); let gap = 5 + sin(millis() / 500) * 15 let colorMap = map(gap, -10, 20, 20, 40) translate(-(gap + 40) * 4.5, -(gap + 50) * 4.5, -(gap + 40) * 4.5); for (let x = 0; x < 10; x++) { push() for (let y = 0; y < 10; y++) { push() for (let z = 0; z < 10; z++) { noStroke() fill(x * colorMap, y * colorMap, z * colorMap) box(20) translate(0, 0, 35 + gap) } pop() translate(0, 35 + gap, 0) } pop() translate(35 + gap, 0, 0) } }