xxxxxxxxxx
91
const order = 5;
const N = 2 ** order;
const total = N * N;
let video;
let vScale = 16;
let path = [];
function setup() {
createCanvas(480, 480);
for (let i = 0; i < total; i++) {
path[i] = hilbert(i);
let len = width / N;
path[i].mult(len);
path[i].add(len / 2, len / 2);
}
pixelDensity(1);
video = createCapture(VIDEO);
let r = 320/ 240;
video.size(r*width / vScale,height / vScale);
//video.hide()
}
function draw() {
background(0);
stroke(255);
strokeWeight(2);
noFill();
beginShape();
for (let i = 1; i < path.length; i++) {
vertex(path[i].x, path[i].y);
}
endShape();
video.loadPixels();
let delta = video.width-video.height - (video.width-video.height)%2;
for (var y = 0; y < video.height; y++) {
for (var x = 0; x < video.height; x++) {
var index = (video.width - (x+0.5*delta) - 1 + (y * video.width)) * 4;
var r = video.pixels[index + 0];
var g = video.pixels[index + 1];
var b = video.pixels[index + 2];
var bright = (r + g + b) / 3;
var w = map(((bright/255)**1.1 )* 255, 0, 255, 0, vScale)**1.1;
noStroke();
fill(r,g,b);
rectMode(CENTER);
rect(x * vScale, y * vScale, w, w);
}
}
}
function hilbert(i) {
let points = [
createVector(0, 0),
createVector(0, 1),
createVector(1, 1),
createVector(1, 0),
];
let index = i & 3;
let v = points[index];
for (let j = 1; j < order; j++) {
i = i >>> 2;
index = i & 3;
let len = 2 ** j;
if (index == 0) {
let tempx = v.x;
v.x = v.y;
v.y = tempx;
} else if (index == 1) {
v.y += len;
} else if (index == 2) {
v.x += len;
v.y += len;
} else if (index == 3) {
let tempx = len - 1 - v.x;
v.x = len - 1 - v.y;
v.y = tempx;
v.x += len;
}
}
return v;
}