// this is for P5JS
// I should note that it creates a perfect animated color loop...
// clr1 array example
// gray blends to light gray / 0 -> 1
// light gray blends to red / 1 -> 2
// red blends to purple / 2 -> 3
// purple blends to red / 3 -> 4
// red blends BACK to gray / 4 -> 0
let stageW = 1080;
let stageH = 1080;
let clrLen;
let whichClr;
let clr1=[ [102,102,102], [153,153,153], [236,31,39], [102,47,144], [236,31,39] ];
let clr2=[ [51,51,51], [255,51,0], [255,255,255] ];
let clr3=[ [255,0,0], [255,255,255], [0,255,0], [0,0,255] ];
let clr1Num = 300;
let clr1Cnt = -1;
let clr1Blk;
let clr2Num = 900;
let clr2Cnt = -1;
let clr2Blk;
let clrA = []; // store 300 color gradients
let clrB = []; // store 900 color gradients
function setup() {
createCanvas(stageW, stageH, WEBGL);
background('#111111');
let _r = int( random(3) );
if(_r==0) {
whichClr = clr1;
}
else if(_r==1) {
whichClr = clr2;
}
else {
whichClr = clr3;
}
setColorTables();
}
function draw() {
background('#111111');
strokeWeight(0);
noStroke();
// 300 COLORS
push();
translate( -((stageW/2)-20), -((stageH/2)-20) );
for (let i = 0; i < clr1Num; ++i) {
fill( clrA[i] );
rect(5+(i*1), 0, 1, 100);
}
pop();
push();
translate( -((stageW/2)-20), -((stageH/2)-130) );
for (let i = 0; i < clr1Num; ++i) {
fill( clrA[ (i+(frameCount*5))%clrA.length ] );
rect(5+(i*1), 0, 1, 100);
}
pop();
// 900 COLORS
push();
translate( -((stageW/2)-20), -((stageH/2)-320) );
for (let i = 0; i < clr2Num; ++i) {
fill( clrB[i] );
rect(5+(i*1), 0, 1, 100);
}
pop();
push();
translate( -((stageW/2)-20), -((stageH/2)-430) );
for (let i = 0; i < clr2Num; ++i) {
fill( clrB[ (i+(frameCount*2))%clrB.length ] );
rect(5+(i*1), 0, 1, 100);
}
pop();
}
function setColorTables() {
clrLen = whichClr.length;
clr1Blk = floor(clr1Num/clrLen);
clr2Blk = floor(clr2Num/clrLen);
for (let i = 0; i < clr1Num; ++i) {
if( i%clr1Blk==0 ) clr1Cnt = (clr1Cnt+1)%clrLen;
let _c1 = color( whichClr[(clr1Cnt)][0], whichClr[(clr1Cnt)][1], whichClr[(clr1Cnt)][2] );
let _c2 = color(whichClr[(clr1Cnt+1)%clrLen][0], whichClr[(clr1Cnt+1)%clrLen][1], whichClr[(clr1Cnt+1)%clrLen][2]);
clrA.push( lerpColor( _c1, _c2, map(i, (clr1Cnt*clr1Blk), (((clr1Cnt+1))*clr1Blk), 0.0, 1.0) ) );
}
for (let i = 0; i < clr2Num; ++i) {
if( i%clr2Blk==0 ) clr2Cnt = (clr2Cnt+1)%clrLen;
let _c1 = color(whichClr[(clr2Cnt)][0], whichClr[(clr2Cnt)][1], whichClr[(clr2Cnt)][2]);
let _c2 = color(whichClr[(clr2Cnt+1)%clrLen][0], whichClr[(clr2Cnt+1)%clrLen][1], whichClr[(clr2Cnt+1)%clrLen][2]);
clrB.push( lerpColor( _c1, _c2, map(i, (clr2Cnt*clr2Blk), (((clr2Cnt+1))*clr2Blk), 0.0, 1.0) ) );
}
}
Comments