Como mencionamos en exposiciones pasadas, estamos usando la librería SimpleOpenNI para hacer nuestros programas. A parte de esta librería hay otros elementos que necesitaremos, si tu quieres instalarlos y probarlos por ti mismo, los puedes descargar e instalar todos de una sola vez. Una compania llamada Zigfu los ha empaquetado todos y están disponibles para instalar a un solo click en el siguiente enlace:
El cual está disponibles para Windows y para Mac.
En esta ocasión las cosas esenciales que hace nuestro programa son las siguientes:
- Detectar el punto más cercano.
- Seguir el movimiento de ese punto actualizando la imagen constantemente
- Pintar la trayectoria de dicho movimiento con métodos simples como Stroke y line y dejar de actualizar para que dicha trayectoria no se borre.
Aqui una imagen del programa funcional:
Y el código que será explicado en clase:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import SimpleOpenNI.*; | |
SimpleOpenNI kinect; | |
int closestValue; | |
int closestX; | |
int closestY; | |
float lastX; | |
float lastY; | |
void setup(){ | |
size(640,480); | |
kinect = new SimpleOpenNI(this); | |
kinect.enableDepth(); | |
background(0); | |
} | |
void draw(){ | |
closestValue = 8000; | |
kinect.update(); | |
int[] depthValues = kinect.depthMap(); | |
for(int y=0; y<480; y++){ | |
for (int x =0;x<640;x++){ | |
//int i = x+y*640; | |
int reversedX = 640-x-1; | |
int i = reversedX + y *640; | |
int currentDepthValue = depthValues[i]; | |
if(currentDepthValue > 610 && currentDepthValue < 1525 | |
&& currentDepthValue < closestValue){ | |
closestValue = currentDepthValue; | |
closestX = x; | |
closestY = y; | |
} | |
} | |
} | |
//image(kinect.depthImage(), 0,0); | |
float interpolatedX = lerp(lastX, closestX, 0.3f); | |
float interpolatedY = lerp(lastY, closestY, 0.3f); | |
//Color ROJO | |
stroke(255,0,0); | |
strokeWeight(3); | |
//Se dibuja la linea del punto anterior al mas nuevo | |
line(lastX, lastY, interpolatedX, interpolatedY); | |
lastX = interpolatedX; | |
lastY = interpolatedY; | |
} | |
void mousePressed(){ | |
background(0); | |
} |
No comments:
Post a Comment