ArtCubert

Preview image for Cubert

cubert.pde

int boxsize = 10;
PImage picture;

int halfBoxsize;
float boxdist;
float a = 0;

void setup() {
  size(1024, 1024, P3D);
  ortho();
  colorMode(HSB);
  
  picture = loadImage("starry-night.jpg");
  picture.loadPixels();
  
  halfBoxsize = round( (boxsize / 2) );
  boxdist = (boxsize * 1.5);
}

void draw() {
  background(0);
  
  float startPosX = ((width % boxdist) / 2);
  float startPosY = ((height % boxdist) / 2);
  
  for(float yy = startPosY; yy < height; yy += boxdist) {
    for(float xx = startPosX; xx < width; xx += boxdist) {
      drawBox(xx, yy);
    }
  }
  
  a += (1 / frameRate);
  
  if(frameCount == 50) { save("preview.png"); }
}


color getColor(float cx, float cy) {
  int xoff = 0;
  int yoff = 0;
  
  if(picture.width > picture.height) {
    xoff = round( ((picture.width - picture.height) / 2) ); 
  } else if(picture.height > picture.width) {
    yoff = round( ((picture.height - picture.width) / 2) );
  }
  
  int px = round(map(cx, 0, width, xoff, (picture.width - (xoff * 2))));
  int py = round(map(cy, 0, height, yoff, (picture.height - (yoff * 2))));
  
  return picture.get(px, py);
}

void drawBox(float x, float y) {
  pushMatrix();
  translate(x, y);
  rotateX((-PI / 6) + a);
  rotateY((asin( (1 / sqrt(2)) ) + a));
  //rotateZ(a);
  color c = getColor(x, y);
  fill(c);
  stroke(color(
    hue(c),
    saturation(c),
    constrain(brightness(c) - 50, 0, 255)
  ));
  box(boxsize);
  popMatrix();
}
pyxol © 2023
built with React + Next.js