const numLines = 50; const lineHeight = 300; const lineWidth = 6; const lineSpacing = 50; const noiseScale = 0.01; function setup() { createCanvas(windowWidth, windowHeight); frameRate(15); } function draw() { drawBackground(); drawLines(); } function drawBackground() { let fromColor = color(0, 0, 0); let toColor = color(255, 255, 255); let gradientHeight = height * 0.0; for (let y = 0; y < gradientHeight; y++) { let inter = map(y, 0, gradientHeight, 0, 1); let bgColor = lerpColor(fromColor, toColor, inter); stroke(bgColor); line(0, y, width, y); } } function drawLines() { for (let i = 0; i < numLines; i++) { let y = i * (lineHeight + lineSpacing); let offset = map(noise(i * noiseScale, frameCount * 0.005), 0, 1, -width * 0.25, width * 0.25); let startX = -lineWidth / 2 + offset; let endX = width + lineWidth / 2 + offset; let curveY = y; let prevCurveY = y; strokeWeight(lineWidth); noStroke(); for (let x = startX; x <= endX; x += lineWidth) { let noiseVal = noise(x * noiseScale, y * noiseScale, frameCount * 0.005); let curveOffset = map(noiseVal, 0, 1, -lineHeight * 0.5, lineHeight * 2.5); curveY = y + curveOffset; if (curveY !== prevCurveY) { fill(random(200, 255), random(200, 255), random(200, 255)); beginShape(); vertex(x, curveY); vertex(x + lineWidth, curveY); vertex(x + lineWidth, prevCurveY); vertex(x, prevCurveY); endShape(CLOSE); prevCurveY = curveY; } } } } function windowResized() { resizeCanvas(windowWidth, windowHeight); } // Clicking in the box toggles fullscreen on and off. function mousePressed() { if (mouseX > 0 && mouseX < windowWidth && mouseY > 0 && mouseY < windowHeight) { let fs = fullscreen(); fullscreen(!fs); } }