TUIO Kinect demo severe lag
in
Contributed Library Questions
•
9 months ago
Hey all,
I am currently using TuioKinect (
http://code.google.com/p/tuiokinect/) to grab blobs into Processing.
All is well. I am running the TuioDemo sketch on Processing 1.5 (was receiving errors when using a more recent version of Processing) without problems.
My issue, is when I add my snippet of code (attached below / highlighted in yellow) I receive a severe lag in the line drawing. (feedback with the blob cursor)
I don't think I am explaining well, since I really don't know whats the issue. code below:
- /*
- TUIO processing demo - part of the reacTIVision project
- http://reactivision.sourceforge.net/
- Copyright (c) 2005-2009 Martin Kaltenbrunner <mkalten@iua.upf.edu>
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
- // we need to import the TUIO library
- // and declare a TuioProcessing client variable
- import TUIO.*;
- TuioProcessing tuioClient;
- // these are some helper variables which are used
- // to create scalable graphical feedback
- float cursor_size = 15;
- float object_size = 60;
- float table_size = 760;
- float scale_factor = 1;
- PFont font;
- ArrayList history = new ArrayList();
- float distthresh=30;
- void setup()
- {
- //size(screen.width,screen.height);
- size(640,480);
- noStroke();
- fill(0);
- loop();
- frameRate(30);
- //noLoop();
- hint(ENABLE_NATIVE_FONTS);
- font = createFont("Arial", 18);
- scale_factor = height/table_size;
- // we create an instance of the TuioProcessing client
- // since we add "this" class as an argument the TuioProcessing class expects
- // an implementation of the TUIO callback methods (see below)
- tuioClient = new TuioProcessing(this);
- }
- // within the draw method we retrieve a Vector (List) of TuioObject and TuioCursor (polling)
- // from the TuioProcessing client and then loop over both lists to draw the graphical feedback.
- void draw()
- {
- background(0);
- textFont(font,18*scale_factor);
- float obj_size = object_size*scale_factor;
- float cur_size = cursor_size*scale_factor;
- Vector tuioObjectList = tuioClient.getTuioObjects();
- for (int i=0;i<tuioObjectList.size();i++) {
- TuioObject tobj = (TuioObject)tuioObjectList.elementAt(i);
- stroke(255);
- strokeWeight(10);
- fill(255);
- pushMatrix();
- translate(tobj.getScreenX(width),tobj.getScreenY(height));
- rotate(tobj.getAngle());
- rect(-obj_size/2,-obj_size/2,obj_size,obj_size);
- popMatrix();
- fill(255);
- text(""+tobj.getSymbolID(), tobj.getScreenX(width), tobj.getScreenY(height));
- }
- Vector tuioCursorList = tuioClient.getTuioCursors();
- for (int i=0;i<tuioCursorList.size();i++) {
- TuioCursor tcur = (TuioCursor)tuioCursorList.elementAt(i);
- Vector pointList = tcur.getPath();
- if (pointList.size()>0) {
- stroke(255);
- TuioPoint start_point = (TuioPoint)pointList.firstElement();;
- for (int j=0;j<pointList.size();j++) {
- TuioPoint end_point = (TuioPoint)pointList.elementAt(j);
- // line(start_point.getScreenX(width),start_point.getScreenY(height),end_point.getScreenX(width),end_point.getScreenY(height));
- start_point = end_point;
- /* THIS IS MY ADDITION TO THE ORIGINAL TuioDemo Sketch *//////////////////////////////
- PVector d = new PVector(start_point.getScreenX(width),end_point.getScreenY(height),cur_size);
- history.add(0,d);
- for (int p=0; p<history.size(); p++){
- PVector v = (PVector) history.get(p);
- float joinchance = p/history.size() + d.dist(v)/distthresh;
- if (joinchance < random(0.4)) line(d.x,d.y,v.x,v.y);
- smooth();
- ///////////////////////////////////////////////////////////////////////////////////////////
- }
- }
- stroke(192,192,192);
- fill(192,192,192);
- ellipse( tcur.getScreenX(width), tcur.getScreenY(height),cur_size,cur_size);
- fill(0);
- text(""+ tcur.getCursorID(), tcur.getScreenX(width)-5, tcur.getScreenY(height)+5);
- }
- }
- }
- // these callback methods are called whenever a TUIO event occurs
- // called when an object is added to the scene
- void addTuioObject(TuioObject tobj) {
- println("add object "+tobj.getSymbolID()+" ("+tobj.getSessionID()+") "+tobj.getX()+" "+tobj.getY()+" "+tobj.getAngle());
- }
- // called when an object is removed from the scene
- void removeTuioObject(TuioObject tobj) {
- println("remove object "+tobj.getSymbolID()+" ("+tobj.getSessionID()+")");
- }
- // called when an object is moved
- void updateTuioObject (TuioObject tobj) {
- println("update object "+tobj.getSymbolID()+" ("+tobj.getSessionID()+") "+tobj.getX()+" "+tobj.getY()+" "+tobj.getAngle()
- +" "+tobj.getMotionSpeed()+" "+tobj.getRotationSpeed()+" "+tobj.getMotionAccel()+" "+tobj.getRotationAccel());
- }
- // called when a cursor is added to the scene
- void addTuioCursor(TuioCursor tcur) {
- println("add cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+ ") " +tcur.getX()+" "+tcur.getY());
- }
- // called when a cursor is moved
- void updateTuioCursor (TuioCursor tcur) {
- println("update cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+ ") " +tcur.getX()+" "+tcur.getY()
- +" "+tcur.getMotionSpeed()+" "+tcur.getMotionAccel());
- }
- // called when a cursor is removed from the scene
- void removeTuioCursor(TuioCursor tcur) {
- println("remove cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+")");
- }
- // called after each message bundle
- // representing the end of an image frame
- void refresh(TuioTime bundleTime) {
- redraw();
- }
here is what I have working with a mouse cursor:
- ArrayList history = new ArrayList();
- float distthresh=30;
- void setup(){
- size(400,400);
- background(255);
- }
- void draw(){
- stroke(10);
- //strokeWeight(2);
- PVector d = new PVector(mouseX,mouseY,0);
- history.add(0,d);
- for (int p=0; p<history.size(); p++){
- PVector v = (PVector) history.get(p);
- float joinchance = p/history.size() + d.dist(v)/distthresh;
- if (joinchance < random(0.4)) line(d.x,d.y,v.x,v.y);
- smooth();
- }
- }
1