From 61fc4a4da64b82fad53f7080ee47181ab2272221 Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Sun, 11 Nov 2012 00:07:35 +0000 Subject: adding kinect 3d cameras --- liveengine/bin/data/settings.xml | 4 +- liveengine/liveengine.cbp | 2 + liveengine/liveengine.layout | 22 +++--- liveengine/src/testApp.cpp | 143 +++++++++++++++++------------------ liveengine/src/testApp.h | 16 ++-- liveengine/src/viewport.cpp | 156 ++++++++++++++++++++++++++++----------- liveengine/src/viewport.h | 46 ++++++++---- 7 files changed, 237 insertions(+), 152 deletions(-) (limited to 'liveengine') diff --git a/liveengine/bin/data/settings.xml b/liveengine/bin/data/settings.xml index d1af114..42e4a52 100755 --- a/liveengine/bin/data/settings.xml +++ b/liveengine/bin/data/settings.xml @@ -1,5 +1,7 @@ - + + + diff --git a/liveengine/liveengine.cbp b/liveengine/liveengine.cbp index 0abe73e..f5c2ae5 100755 --- a/liveengine/liveengine.cbp +++ b/liveengine/liveengine.cbp @@ -33,6 +33,8 @@ + + diff --git a/liveengine/liveengine.layout b/liveengine/liveengine.layout index 636f5d1..131871b 100755 --- a/liveengine/liveengine.layout +++ b/liveengine/liveengine.layout @@ -1,25 +1,25 @@ - + - + - + - - + + - - + + - - + + - - + + diff --git a/liveengine/src/testApp.cpp b/liveengine/src/testApp.cpp index 8527f73..d5288c1 100755 --- a/liveengine/src/testApp.cpp +++ b/liveengine/src/testApp.cpp @@ -88,7 +88,7 @@ void testApp::setup(){ kw->addListener(kinectWin); kinectWin->setup(); kinectWin->setParent(this); - + isLive = true; isTracking = false; isFiltering = false; @@ -99,7 +99,7 @@ void testApp::setup(){ farThreshold = 1000; filterFactor = 10.0f; - + recordContext.setup(); recordDepth.setup(&recordContext); recordImage.setup(&recordContext); @@ -110,7 +110,18 @@ void testApp::setup(){ recordUser.setMaxNumberOfUsers(2); } viewports.push_back(new viewport(w,h,x,y,rot,ox,oy)); - viewports[viewports.size()-1]->setUG(&recordUser); + viewports[i]->setUG(&recordUser); + + XML.pushTag("viewport",i); + vectorkeys; + XML.getAttributeNames("settings", keys, 0); + mapsettings; + for (int k=0;ksetcam(settings); + XML.popTag(); + } else viewports.push_back(new viewport(w,h,x,y,rot,ox,oy)); } @@ -118,7 +129,9 @@ void testApp::setup(){ else printf("no viewports!\n"); } } - + + activeView=-1; + midiIn.listPorts(); midiIn.openPort(midiPort); midiIn.addListener(this); @@ -227,7 +240,7 @@ void testApp::makeColours() { //-------------------------------------------------------------- void testApp::update(){ //for (int i=0;iupdate(); - + if (useKinect) { recordContext.update(); recordDepth.update(); @@ -235,7 +248,25 @@ void testApp::update(){ recordUser.update(); } } +void testApp::saveSettings(string filename){ + if(XML.pushTag("liveEngine")) { + for (int i=0;iisMapped) { + XML.pushTag("viewport",i); + vectorkeys; + XML.getAttributeNames("settings", keys, 0); + for (int k=0;kgetSetting(keys[k]),0); + } + XML.popTag(); + } + } + XML.popTag(); + } + XML.saveFile(filename); + printf("saved %s\n",filename.c_str()); +} //-------------------------------------------------------------- void testApp::draw(){ @@ -395,75 +426,38 @@ void testApp::keyPressed(int key, ofxFenster* win){ else keyPressed(key); } void testApp::keyPressed(int key){ - if(key == 'q'){ - list.load("insects.xml"); - } - if(key == 'Q'){ - list.load("birds.xml"); - } - if(key == 'w'){ - list.load("teamsports.xml"); - } - if(key == 'W'){ - list.load("american_football.xml"); - } - if(key == 'e'){ - list.load("organs.xml"); - } - if(key == 'E'){ - list.load("crests.xml"); - } - if(key == 'r'){ - list.load("tai_chi.xml"); - } - if(key == 'R'){ - list.load("cricket.xml"); - } - if(key == 't'){ - list.load("reptiles.xml"); - } - if(key == 'T'){ - list.load("tools.xml"); - } - if(key == 'y'){ - list.load("miltary_ladies.xml"); - } - if(key == 'Y'){ - list.load("women_ethnic.xml"); - } - if(key == 'u'){ - list.load("knights.xml"); - } - if(key == 'U'){ - list.load("food.xml"); - } - if(key == 'i'){ - list.load("mil_historic.xml"); - } - if(key == 'I'){ - list.load("mil_ethnic.xml"); - } - if(key == 'o'){ - list.load("yoga.xml"); - } - if(key == 'O'){ - list.load("computers.xml"); - } - if(key == 'p'){ - list.load("dancing.xml"); - } - if(key == 'P'){ - list.load("trainers.xml"); - } - if(key == 's'){ - XML.saveFile("settings.xml"); + + if (activeView<0) for (int i=0;ikeyPressed(key); + else if (activeViewkeyPressed(key); + + + if (key>='1' && key <='6'){ + activeView=min(key-'3',(int)viewports.size()); + switch (activeView){ + case -2: + printf("deactivating viewport adjustment\n"); + break; + case -1: + printf("adjusting all viewports\n"); + break; + case 0: + case 1: + case 2: + case 3: + printf("adjusting viewport %i\n",activeView ); + break; + } + } + + if(key == 'p'){ + saveSettings("settings.xml"); printf("settings saved!\n"); } if(key == 'f'){ toggleFPS(); } - if(key >='0' && key <= '9'){ - mode=key-'0'; + if(key >='7' && key <= '9'){ + mode=key-'7'; } if(key == 267){ xshift--; @@ -500,14 +494,10 @@ void testApp::keyPressed(int key){ } - if(key == 'd'){ - debug=!debug; - } - - if (key=='j') { + if (key=='.') { fscale=1.0f; } - if (key=='h') { + if (key=='/') { scale=1.0f; } @@ -515,7 +505,8 @@ void testApp::keyPressed(int key){ //-------------------------------------------------------------- void testApp::keyReleased(int key){ - + if (activeView<0) for (int i=0;ikeyReleased(key); + else if (activeViewkeyReleased(key); } //-------------------------------------------------------------- diff --git a/liveengine/src/testApp.h b/liveengine/src/testApp.h index e0a00cc..2f4b4e1 100755 --- a/liveengine/src/testApp.h +++ b/liveengine/src/testApp.h @@ -84,6 +84,7 @@ option to randomise colours on each note #include "viewport.h" + /* enum PropertyAttribute { None = 0, @@ -119,6 +120,8 @@ class testApp : public ofxFensterListener, public ofxMidiListener{ void dragEvent(ofDragInfo dragInfo); void dragEvent(ofDragInfo dragInfo,ofxFenster* win); + void saveSettings(string filename); + void mousePressedEvent(ofMouseEventArgs &args); void keyPressedEvent(ofKeyEventArgs &args); void windowEvent(ofResizeEventArgs &args); @@ -154,6 +157,7 @@ class testApp : public ofxFensterListener, public ofxMidiListener{ viewport vp1,vp2; vector viewports; + int activeView; previewWindow *prevWin; guiWindow *guiWin; @@ -168,7 +172,7 @@ class testApp : public ofxFensterListener, public ofxMidiListener{ void newMidiMessage(ofxMidiEventArgs& eventArgs); playlist list; - + ofxPanel gui; ofxToggle reversemain; @@ -180,18 +184,18 @@ class testApp : public ofxFensterListener, public ofxMidiListener{ void resetDrawscalePressed(bool & pressed); void resetFBscalePressed(bool & pressed); - + //kinect stuff - + bool useKinect; - + bool isLive, isTracking, isMasking, isFiltering, isCloud; - + ofxOpenNIContext recordContext; ofxDepthGenerator recordDepth; ofxImageGenerator recordImage; ofxUserGenerator recordUser; - + int nearThreshold, farThreshold; float filterFactor; diff --git a/liveengine/src/viewport.cpp b/liveengine/src/viewport.cpp index fab77ce..35a4036 100755 --- a/liveengine/src/viewport.cpp +++ b/liveengine/src/viewport.cpp @@ -1,4 +1,5 @@ -#include "viewport.h" +#include "viewport.h" +#define DEBUG 0 //texture binding with normalised coords void bindTexture(ofBaseHasTexture &t) { @@ -74,9 +75,9 @@ void viewport::setup(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy) { } void viewport::draw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift){ - - - + + + // test screen shape /* ofSetColor(255,0,0); @@ -86,7 +87,7 @@ void viewport::draw(float a,unsigned char* controllers,int xshift,int yshift,pla ofRect(0,h/2,w/2,h/2); ofRect(w/2,0,w/2,h/2); */ - + rb1.begin(); //can be done with texture offset? @@ -95,7 +96,7 @@ void viewport::draw(float a,unsigned char* controllers,int xshift,int yshift,pla while (startx>0) startx-=(w*fscale); int starty=((h-(h*fscale))/2)+yshift; while (starty>0) starty-=(h*fscale); - + for (int i=startx;i&settings){ + + vars=new keyVar[9]; + vars[0].set('w','s',ofToFloat(settings["fov"]),0.2,1.0,3.0); + vars[1].set('g','d',ofToFloat(settings["targX"]),1,1.0,3.0); + vars[2].set('r','v',ofToFloat(settings["targY"]),1,1.0,3.0); + vars[3].set('t','c',ofToFloat(settings["targZ"]),1,1.0,3.0); + vars[4].set('u','n',ofToFloat(settings["lat"]),1,1.0,3.0); + vars[5].set('j','h',ofToFloat(settings["lng"]),1,1.0,3.0); + vars[6].set(',','m',ofToFloat(settings["roll"]),1,1.0,3.0); + vars[7].set('o','l',ofToFloat(settings["dolly"]),1,1.0,3.0); + vars[8].set('q','a',ofToFloat(settings["distort"]),.00001,1.0,3.0); +} +double viewport::getSetting(const string& setting){ + if (setting=="fov") return vars[0].getVal(); + if (setting=="targX") return vars[1].getVal(); + if (setting=="targY") return vars[2].getVal(); + if (setting=="targZ") return vars[3].getVal(); + if (setting=="lat") return vars[4].getVal(); + if (setting=="lng") return vars[5].getVal(); + if (setting=="roll") return vars[6].getVal(); + if (setting=="dolly") return vars[7].getVal(); + if (setting=="distort") return vars[8].getVal(); + return 0.0; } void viewport::mapdraw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift){ - //printf("draw mapped%s\n",ofGetFrameNum()); - rb1.begin(); + + ofNode c=ofNode(); + ofNode t=ofNode(); + t.setParent(c); + t.setPosition(vars[1].getVal(),vars[2].getVal(),vars[3].getVal()); + //make target controls relative to rotation + c.rotate(vars[5].getVal(), ofVec3f(0, 1, 0)); + + target.setPosition(t.getGlobalPosition()); + //camera.orbit(vars[5].getVal(), vars[4].getVal(), vars[7].getVal(), target); + camera.setFov(vars[0].getVal()); + ofVec3f p(0, 0, vars[7].getVal()); + //p.rotate(ofClamp(vars[2].getVal(), -89, 89), ofVec3f(1, 0, 0)); + p.rotate(vars[4].getVal(), ofVec3f(1, 0, 0)); + p.rotate(vars[5].getVal(), ofVec3f(0, 1, 0)); + p += target.getPosition(); + camera.setPosition(p); + camera.lookAt(target,ofVec3f(0,1,0).rotate(vars[6].getVal(),ofVec3f(0,0,1)).rotate(vars[5].getVal(),ofVec3f(0,1,0))); + + rb1.begin(); + + camera.begin(); + int startx=((w-(w*fscale))/2)+xshift; while (startx>0) startx-=(w*fscale); int starty=((h-(h*fscale))/2)+yshift; while (starty>0) starty-=(h*fscale); - + for (int i=startx;igetNumberOfTrackedUsers();i++){ ofxTrackedUser* u=(rUser->getTrackedUser(i+1)); - + //if (u->skeletonTracking) { if (u->neck.found) { // u->debugDraw(); //ofxTrackedUser* u= //printf("%i\n",(int)recordUser.getTrackedUser(i)->id); //printf("tracking\n"); - + /* glBegin(GL_QUADS); glVertex3i(u->hip.position[0].X, u->hip.position[0].Y,u->hip.position[0].Z); @@ -249,7 +298,7 @@ void viewport::mapdraw(float a,unsigned char* controllers,int xshift,int yshift, glVertex3i(u->left_shoulder.position[1].X, u->left_shoulder.position[1].Y, u->left_shoulder.position[1].Z); glEnd(); */ - + /* glBegin(GL_QUADS); glVertex3i(u->hip.position[0].X, u->hip.position[0].Y,0); @@ -258,40 +307,40 @@ void viewport::mapdraw(float a,unsigned char* controllers,int xshift,int yshift, glVertex3i(u->left_shoulder.position[1].X, u->left_shoulder.position[1].Y,0); glEnd(); */ - + float ratio=16.0f/9.0f; float heightratio=0.8f; float widthratio=0.8f; - + float ax=((float)(u->hip.position[1].X-u->hip.position[0].X)); //hip width x float ay=((float)(u->hip.position[1].Y-u->hip.position[0].Y)); //hip width y - + float cx=(float)(u->hip.position[0].X)+(ax*0.5f); //centre of hips float cy=(float)(u->hip.position[0].Y)+(ay*0.5f); - + float hx=(((float)(u->left_shoulder.position[0].X))-cx); //height of torso float hy=(((float)(u->left_shoulder.position[0].Y))-cy); - + float p1x=cx+(hx*(1.0f-heightratio)*0.5f); //centre of frame bottom - float p1y=cy+(hy*(1.0f-heightratio)*0.5f); - + float p1y=cy+(hy*(1.0f-heightratio)*0.5f); + float p2x=cx+(hx*(1.0f-((1.0f-heightratio)*0.5f))); //centre of frame top float p2y=cy+(hy*(1.0f-((1.0f-heightratio)*0.5f))); - + ofVec3f c1=ofVec3f(p2x-(ax*0.5*widthratio), p2y-(ay*0.5*widthratio),0); ofVec3f c2=ofVec3f(p2x+(ax*0.5*widthratio), p2y+(ay*0.5*widthratio),0); ofVec3f c3=ofVec3f(p1x-(ax*0.5*widthratio), p1y-(ay*0.5*widthratio),0); ofVec3f c4=ofVec3f(p1x+(ax*0.5*widthratio), p1y+(ay*0.5*widthratio),0); - - + + /* ofVec3f c1=ofVec3f(u->left_shoulder.position[1].X, u->left_shoulder.position[1].Y,0); ofVec3f c2=ofVec3f(u->right_shoulder.position[1].X, u->right_shoulder.position[1].Y,0); ofVec3f c3=ofVec3f(u->hip.position[1].X, u->hip.position[1].Y,0); ofVec3f c4=ofVec3f(u->hip.position[0].X, u->hip.position[0].Y,0); */ - - + + /* glBegin(GL_QUADS); glVertex3i(u->hip.position[1].X, u->hip.position[1].Y,0); @@ -300,8 +349,8 @@ void viewport::mapdraw(float a,unsigned char* controllers,int xshift,int yshift, glVertex3i(u->right_shoulder.position[1].X, u->right_shoulder.position[1].Y,0); glEnd(); */ - - + + ofMesh targ; targ.addVertex(c1); targ.addTexCoord(ofVec2f(0,0)); @@ -316,22 +365,22 @@ void viewport::mapdraw(float a,unsigned char* controllers,int xshift,int yshift, targ.addVertex(c4); targ.addTexCoord(ofVec2f(1,1)); targ.draw(); - - - + + + //ofLine(u->left_shoulder.position[1].X,u->left_shoulder.position[1].Y,u->left_shoulder.position[1].Z,u->right_shoulder.position[1].X,u->right_shoulder.position[1].Y,u->right_shoulder.position[1].Z); ofLine(u->right_shoulder.position[1].X,u->right_shoulder.position[1].Y,u->right_shoulder.position[1].Z,u->right_lower_torso.position[1].X,u->right_lower_torso.position[1].Y,u->right_lower_torso.position[1].Z); ofLine(u->right_lower_torso.position[1].X,u->right_lower_torso.position[1].Y,u->right_lower_torso.position[1].Z,u->left_lower_torso.position[1].X,u->left_lower_torso.position[1].Y,u->left_lower_torso.position[1].Z); ofLine(u->left_lower_torso.position[1].X,u->left_lower_torso.position[1].Y,u->left_lower_torso.position[1].Z,u->left_shoulder.position[1].X,u->left_shoulder.position[1].Y,u->left_shoulder.position[1].Z); - + } } glPopMatrix(); unbindTexture(rb1); - - + + rb3.end(); - + ofPushMatrix(); ofTranslate(x+(w/2),y+(h/2)); ofRotate(r); @@ -339,9 +388,32 @@ void viewport::mapdraw(float a,unsigned char* controllers,int xshift,int yshift, ofTranslate(ox,oy); rb3.draw(0,0); - + ofPopStyle(); - + ofPopMatrix(); +} +//-------------------------------------------------------------- +void viewport::setDefaults(){ + vars[0].setVal(17.25); + vars[1].setVal(0.0); + vars[2].setVal(112.0); + vars[3].setVal(0.0); + vars[4].setVal(0.0); + vars[5].setVal(0.0); + vars[6].setVal(0.0); + vars[7].setVal(1000.0); + vars[8].setVal(0.0); +} +//-------------------------------------------------------------- + +void viewport::keyPressed(int key){ + for (int i=0;i<8;i++) vars[i].keyPressed(key); + if (DEBUG) printf("fov: %f distort: %f\n",vars[0].getVal(),vars[7].getVal()); + if (key=='!') setDefaults(); +} +//-------------------------------------------------------------- +void viewport::keyReleased(int key){ + for (int i=0;i<8;i++) vars[i].keyReleased(key); } diff --git a/liveengine/src/viewport.h b/liveengine/src/viewport.h index 4c3f948..51c56c8 100755 --- a/liveengine/src/viewport.h +++ b/liveengine/src/viewport.h @@ -17,38 +17,52 @@ void bindTexture(ofBaseHasTexture &t); void unbindTexture(ofBaseHasTexture &t); void bindTex(ofTexture &tex); -void unbindTex(ofTexture &tex); +void unbindTex(ofTexture &tex); + +#include "keyVar.h" class viewport { public: - viewport(); - viewport(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy); + viewport(); + viewport(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy); void setup(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy); - void draw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift); + void draw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift); void mapdraw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift); - - ofImage testtexture; - virtual ~viewport(); - void setUG(ofxUserGenerator *_rUser); - ofFbo rb1,rb2,rb3; - float r; - bool isMapped; + void setcam(map&settings); + double getSetting(const string& setting); + + ofImage testtexture; + virtual ~viewport(); + void setUG(ofxUserGenerator *_rUser); + ofFbo rb1,rb2,rb3; + float r; + bool isMapped; + + void setDefaults(); + void keyPressed(int key); + void keyReleased(int key); + protected: int x, y,w,h,ox,oy; - ofxUserGenerator *rUser; private: - - + keyVar* vars; + + ofCamera camera; + ofNode target; + }; class mappedviewport: public viewport { - public: + public: + mappedviewport(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy); void setUG(ofxUserGenerator *_rUser); void mapdraw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift); - ofxUserGenerator *rUser; + ofxUserGenerator *rUser; + private: + }; #endif // VIEWPORT_H -- cgit v1.2.3