I’m interested in gesture based interfaces and have been learning about the Leap Motion controller, which is a device that senses hands, fingers and multiple gestures, allowing you to interact with content in a new way.


Below is some source code I wrote for an example that tracks a color changing circle to your fingers. If you have a Leap, check out the demo.
index.html
main.js
document.addEventListener("DOMContentLoaded", init);
var canvas;
var ctx;
function init() {
canvas = document.getElementById("leap-canvas");
// fullscreen
canvas.width = document.body.clientWidth;
canvas.height = document.body.clientHeight;
// create a rendering context
ctx = canvas.getContext("2d");
ctx.translate(canvas.width/2,canvas.height);
//change color of pointable at interval
setInterval(color, 50);
// listen to Leap Motion
Leap.loop(draw);
}
function color() {
//rgb color
this.r = Math.floor(Math.random() * 255);
this.g = Math.floor(Math.random() * 255);
this.b = Math.floor(Math.random() * 255);
ctx.fillStyle = "rgb("+ this.r +", "+ this.g +", "+ this.b +")";
}
// render each frame
function draw(obj) {
// clear last frame
ctx.clearRect(-canvas.width/2,-canvas.height,canvas.width,canvas.height);
// render circles based on pointable positions
var pointablesMap = obj.pointablesMap;
for (var i in pointablesMap) {
// get the pointable's position
var pointable = pointablesMap[i];
var pos = pointable.tipPosition;
// create a circle for each pointable
var radius = Math.min(600/Math.abs(pos[2]),20);
ctx.beginPath();
ctx.arc(pos[0]-radius/2,-pos[1]-radius/2,radius,0,2*Math.PI);
ctx.fill();
}
}
Download from Github



You must be logged in to post a comment.