obelisk-browserify
Version:
Browserify-compatible fork of obelisk.js, hopefully temporary
85 lines (72 loc) • 2.49 kB
JavaScript
// control bar
var ControlBar = function () {
this.size = 20;
this.snap = false;
};
var con = new ControlBar();
var gui = new dat.GUI();
var conSize = gui.add(con, 'size', 6, 40).step(2);
conSize.onChange(function () {
draw();
});
var conSnap = gui.add(con, 'snap');
conSnap.onChange(function () {
draw();
});
var WIDTH = 17;
var HEIGHT = 12;
var img = document.getElementById('animation');
var ctx = document.createElement('canvas').getContext("2d");
var canvas = document.getElementById('canvas-demo');
var stack = [];
var point = new obelisk.Point(400, 50);
var pixelView = new obelisk.PixelView(canvas, point);
function getPixel(data, x, y) {
var index = (y * WIDTH + x) * 4;
var r = data[index];
var g = data[index + 1];
var b = data[index + 2];
return ((r << 16) | (g << 8) | b);
}
function draw() {
var size = con.size;
var snap = con.snap ? 2 : 0;
stack = [];
ctx.drawImage(img, 0, 0, WIDTH, HEIGHT);
var imgData = ctx.getImageData(0, 0, WIDTH, HEIGHT);
pixelView.clear();
var color = new obelisk.SideColor().getByInnerColor(obelisk.ColorPattern.GRAY);
var dimension = new obelisk.BrickDimension(size, size);
var brick = new obelisk.Brick(dimension, color);
for (var y = 0; y <= HEIGHT; y++) {
for (var x = 0; x <= WIDTH; x++) {
var p3d = new obelisk.Point3D(x * (size - snap), y * (size - snap), 0);
pixelView.renderObject(brick, p3d)
}
}
for (var y = 0; y < HEIGHT; y++) {
for (var x = 0; x < WIDTH; x++) {
var pixelColor = getPixel(imgData.data, x, y);
if (pixelColor !== 0xFFFFFF) {
var cube;
var flag = false;
for (var i in stack) {
if (stack[i][1] === pixelColor) {
cube = stack[i][0];
flag = true;
break;
}
}
if (!flag) {
var color = new obelisk.CubeColor().getByHorizontalColor(pixelColor);
var dimension = new obelisk.CubeDimension(size, size, size - 2);
cube = new obelisk.Cube(dimension, color, false);
stack.push([cube, pixelColor]);
}
var p3d = new obelisk.Point3D(x * (size - snap), y * (size - snap), 0);
pixelView.renderObject(cube, p3d);
}
}
}
}
draw();