summaryrefslogtreecommitdiff
path: root/liveengine/src
diff options
context:
space:
mode:
Diffstat (limited to 'liveengine/src')
-rwxr-xr-xliveengine/src/layers.cpp18
-rwxr-xr-xliveengine/src/layers.h5
-rwxr-xr-xliveengine/src/main.cpp2
-rwxr-xr-xliveengine/src/playlist.cpp54
-rwxr-xr-x[-rw-r--r--]liveengine/src/playlist.h11
-rwxr-xr-xliveengine/src/testApp.cpp137
-rwxr-xr-xliveengine/src/testApp.h31
-rwxr-xr-xliveengine/src/viewport.cpp234
-rwxr-xr-xliveengine/src/viewport.h28
9 files changed, 471 insertions, 49 deletions
diff --git a/liveengine/src/layers.cpp b/liveengine/src/layers.cpp
index 6724255..4ac0c59 100755
--- a/liveengine/src/layers.cpp
+++ b/liveengine/src/layers.cpp
@@ -38,7 +38,7 @@ void svglayer::draw(float a,int cx,int cy,float colShift) {
svg.getPathAt(i).draw(xo,yo);
}
}
-
+/*
void svglayer::draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack,float colShift) {
getCentre(cx,cy);
//draw layers tinted by controllers
@@ -56,6 +56,22 @@ void svglayer::draw(float a,unsigned char* controllers,int cx,int cy,bool transp
svg.getPathAt(i).draw(xo,yo);
}
}
+}
+*/
+
+void svglayer::draw(float a,unsigned char* controllers,int cx,int cy,bool transparentBlack,float colShift) {
+ getCentre(cx,cy);
+ //draw layers grouped by controllers
+ float layerspercontroller=((float)svg.getNumPath())/6.0f;
+
+ for (int i=0;i<6;i++) {
+ for (int j=(int)(i*layerspercontroller);j<(int)((i+1)*layerspercontroller);j++) {
+ svg.getPathAt(j).setFillColor(fills[i]*a*controllers[i]);
+ if (!transparentBlack||((a*controllers[i])/127.0)>0.1) {
+ svg.getPathAt(j).draw(xo,yo);
+ }
+ }
+ }
}
diff --git a/liveengine/src/layers.h b/liveengine/src/layers.h
index 3a7883e..c6f4171 100755
--- a/liveengine/src/layers.h
+++ b/liveengine/src/layers.h
@@ -1,7 +1,8 @@
#ifndef SVGLAYER_H
#define SVGLAYER_H
-#include "ofxSVGTiny.h"
+#include "ofxSVGTiny.h"
+#include "ofMain.h"
class layer
{
@@ -16,7 +17,7 @@ class layer
protected:
bool isLoaded;
private:
-
+
};
class svglayer: public layer
diff --git a/liveengine/src/main.cpp b/liveengine/src/main.cpp
index dadd89f..f0c0c0f 100755
--- a/liveengine/src/main.cpp
+++ b/liveengine/src/main.cpp
@@ -7,7 +7,7 @@
int main( ){
ofAppGlutWindow window;
- ofSetupOpenGL(ofxFensterManager::get(),2048,768, OF_WINDOW);
+ ofSetupOpenGL(ofxFensterManager::get(),1024,768, OF_WINDOW); //2048,768
//ofSetupOpenGL(&window, 1024,768, OF_WINDOW); // <-------- setup the GL context
//ofSetupOpenGL(&window, 1024,768, OF_WINDOW);
diff --git a/liveengine/src/playlist.cpp b/liveengine/src/playlist.cpp
index af44940..51bd852 100755
--- a/liveengine/src/playlist.cpp
+++ b/liveengine/src/playlist.cpp
@@ -1,11 +1,14 @@
#include "playlist.h"
playlist::playlist()
-{
+{
+ name="";
+ thumbnail.allocate(128,128,GL_RGB);
+ thumbnailed=false;
}
void playlist::load(string _name){
- printf("loading %s\n",_name.c_str());
+ //printf("loading %s\n",_name.c_str());
if( !XML.loadFile(_name) ){
@@ -28,23 +31,42 @@ void playlist::threadedFunction(){
}
void playlist::loadsvg(){
- int numLayers=0;
- layers.clear();
- if(XML.pushTag("playlist")) {
- numLayers=XML.getNumTags("svglayer");
- if(numLayers) {
- for (int i=0;i<numLayers;i++) {
- string s=XML.getAttribute("svglayer", "file", "",i);
- printf("loading %s: ",s.c_str());
- layers[XML.getAttribute("svglayer", "note", 0,i)]=new svglayer(XML.getAttribute("svglayer", "file", "",i));
- }
- }
- else printf("no SVG layers loaded!\n");
- XML.popTag();
- }
+ int numLayers=0;
+ layers.clear();
+ name=XML.getAttribute("playlist", "name", "");
+ if(XML.pushTag("playlist")) {
+ numLayers=XML.getNumTags("svglayer");
+ if(numLayers) {
+ for (int i=0;i<numLayers;i++) {
+ string s=XML.getAttribute("svglayer", "file", "",i);
+ printf("loading %s: ",s.c_str());
+ layers[XML.getAttribute("svglayer", "note", 0,i)]=new svglayer(XML.getAttribute("svglayer", "file", "",i));
+ }
+ thumbnailed=false;
+ }
+ else printf("no SVG layers loaded!\n");
+ XML.popTag();
+ }
}
+void playlist::makeThumbnail(){
+ if (layers.size()) {
+ thumbnail.begin();
+ ofBackground(0,0,0);
+ ofPushMatrix();
+ ofTranslate(64,64);
+ ofScale(0.2,0.2,0.2);
+ ofTranslate(-64,-64);
+ map<int,layer*>::iterator i=layers.begin();
+ i->second->draw(1.0,64,64,0.0);
+ ofPopMatrix();
+ thumbnail.end();
+ thumbnailed=true;
+ }
+}
+
+
void playlist::loadimg(){
int numLayers=0;
layers.clear();
diff --git a/liveengine/src/playlist.h b/liveengine/src/playlist.h
index 43982f9..846de74 100644..100755
--- a/liveengine/src/playlist.h
+++ b/liveengine/src/playlist.h
@@ -4,8 +4,8 @@
#include "ofThread.h"
#include "ofxXmlSettings.h"
-#include "layers.h"
-
+#include "layers.h"
+#include "ofMain.h"
class playlist : public ofThread {
public:
@@ -14,10 +14,15 @@ class playlist : public ofThread {
void loadimg();
void loadsvg();
void load(string _name);
- void threadedFunction();
+ void threadedFunction();
+ void makeThumbnail();
+
+ ofFbo thumbnail;
+ bool thumbnailed;
ofxXmlSettings XML;
map<int,layer*> layers;
+ string name;
protected:
private:
};
diff --git a/liveengine/src/testApp.cpp b/liveengine/src/testApp.cpp
index 7f0ff47..8527f73 100755
--- a/liveengine/src/testApp.cpp
+++ b/liveengine/src/testApp.cpp
@@ -8,7 +8,7 @@ void previewWindow::setBuffer(ofFbo *buffer){
}
void previewWindow::draw(){
- rb->draw(0,0,ofGetWidth(),ofGetHeight());
+ rb->draw(0,0,ofGetWidth(),ofGetHeight()); //why crash?
}
//--------------------------------------------------------------
@@ -22,26 +22,103 @@ void guiWindow::setParent(testApp *p){
void guiWindow::draw(){
parent->gui.draw();
+ if (parent->list.lock()) { //if loaded
+ if (!parent->list.thumbnailed) parent->list.makeThumbnail();
+ if (parent->list.thumbnailed) parent->list.thumbnail.draw(20,ofGetHeight()-150);
+ parent->list.unlock();
+ }
+ ofDrawBitmapString(parent->list.name,20,ofGetHeight()-10);
}
void guiWindow::dragEvent(ofDragInfo dragInfo, ofxFenster* win){
- printf("gui received file:%s\n",dragInfo.files[0].c_str());
+ parent->dragEvent(dragInfo);
+}
+void guiWindow::windowMoved(int x,int y){
+ //printf("window moved!\n");
+}
+
+//----------------------------------------------------------------------
+
+kinectWindow::~kinectWindow(){
+ cout << "kinect window destroyed" << endl;
+}
+void kinectWindow::setup(){
+}
+void kinectWindow::setParent(testApp *p){
+ parent=p;
+}
+void kinectWindow::draw(){
+ parent->recordDepth.draw(0,0,ofGetWidth(),ofGetHeight());
+ parent->recordUser.draw(ofGetWidth(),ofGetHeight());
}
+
//--------------------------------------------------------------
void testApp::setup(){
int midiPort=0;
- midiChannel=0;
+ midiChannel=0;
+ useKinect=false;
if( !XML.loadFile("settings.xml") ){
printf("unable to load settings.xml check data/ folder\n");
}else{
printf("settings loaded!\n");
midiPort=ofToInt(XML.getAttribute("liveEngine", "port", "0")); //default to 0/all
- midiChannel=ofToInt(XML.getAttribute("liveEngine", "channel", "0"));
- if (midiChannel) printf("listening on port %d, midi channel %d\n",midiPort,midiChannel);
- else printf("listening on port %d, all midi channels\n",midiPort);
- }
-
+ midiChannel=ofToInt(XML.getAttribute("liveEngine", "channel", "0"));
+ if (midiChannel) printf("listening on port %d, midi channel %d\n",midiPort,midiChannel);
+ else printf("listening on port %d, all midi channels\n",midiPort);
+ if(XML.pushTag("liveEngine")) {
+ int numViews=XML.getNumTags("viewport");
+ if(numViews) {
+ for (int i=0;i<numViews;i++) {
+ int w=XML.getAttribute("viewport", "w",0,i);
+ int h=XML.getAttribute("viewport", "h",0,i);
+ int x=XML.getAttribute("viewport", "x",0,i);
+ int y=XML.getAttribute("viewport", "y",0,i);
+ int rot=XML.getAttribute("viewport", "rot",0,i);
+ int ox=XML.getAttribute("viewport", "ox",0,i);
+ int oy=XML.getAttribute("viewport", "oy",0,i);
+ printf("viewport %i: %ix%i\n",i,w,h);
+ if (XML.getAttribute("viewport", "mapped",0,i)==1) {
+ if (!useKinect) {
+ //set up preview window and kinect classes
+ useKinect=true;
+ kinectWin=new kinectWindow();
+ ofxFenster* kw=ofxFensterManager::get()->createFenster(0, 0, 320, 240, OF_WINDOW);
+ kw->setWindowTitle("kinect");
+ kw->addListener(kinectWin);
+ kinectWin->setup();
+ kinectWin->setParent(this);
+
+ isLive = true;
+ isTracking = false;
+ isFiltering = false;
+ isMasking = true;
+ isCloud = false;
+
+ nearThreshold = 500;
+ farThreshold = 1000;
+
+ filterFactor = 10.0f;
+
+ recordContext.setup();
+ recordDepth.setup(&recordContext);
+ recordImage.setup(&recordContext);
+ recordUser.setup(&recordContext);
+ recordUser.setSmoothing(filterFactor); // built in openni skeleton smoothing...
+ recordUser.setUseMaskPixels(isMasking);
+ recordUser.setUseCloudPoints(isCloud);
+ recordUser.setMaxNumberOfUsers(2);
+ }
+ viewports.push_back(new viewport(w,h,x,y,rot,ox,oy));
+ viewports[viewports.size()-1]->setUG(&recordUser);
+ }
+ else viewports.push_back(new viewport(w,h,x,y,rot,ox,oy));
+ }
+ }
+ else printf("no viewports!\n");
+ }
+ }
+
midiIn.listPorts();
midiIn.openPort(midiPort);
midiIn.addListener(this);
@@ -65,8 +142,8 @@ void testApp::setup(){
transparentBlack=false;
reversemain=false;
- vp1.setup(768,1024,1024,0,-90,-256,-384);
- vp2.setup(1024,768,0,0,0,-512,-384);
+ //vp1.setup(768,1024,1024,0,-90,-256,-384);
+ //vp2.setup(1024,768,0,0,0,-512,-384);
showFPS=false;
ofBackground(0,0,0);
@@ -103,11 +180,10 @@ void testApp::setup(){
ofAddListener(win->events.mouseDragged, this, &testApp::mousePressedEvent);
ofAddListener(win->events.mousePressed, this, &testApp::mousePressedEvent);
ofAddListener(win->events.keyPressed, this, &testApp::keyPressedEvent);
- ofAddListener(win->events.fileDragEvent, this, &testApp::refDragEvent);
win->setWindowTitle("preview");
win->addListener(prevWin);
prevWin->setup();
- prevWin->setBuffer(&vp1.rb2);
+ prevWin->setBuffer(&viewports[0]->rb2);
fullscreenoutput=false;
@@ -125,9 +201,9 @@ void testApp::setup(){
//gui window stuff
ofxFenster* win2=ofxFensterManager::get()->createFenster(0, 0, 200, 400, OF_WINDOW);
- ofAddListener(win2->events.fileDragEvent, this, &testApp::refDragEvent);
- //ofAddListener(win2->events.mousePressed, 0, &testApp::mousePressedEvent);
- //ofAddListener(win2->events.keyPressed, this, &testApp::keyPressedEvent);
+
+ ofAddListener(win2->events.windowResized, this, &testApp::windowEvent);
+
win2->setWindowTitle("config");
win2->addListener(guiWin);
guiWin->setup();
@@ -151,6 +227,13 @@ void testApp::makeColours() {
//--------------------------------------------------------------
void testApp::update(){
//for (int i=0;i<numLayers;i++) layers[i]->update();
+
+ if (useKinect) {
+ recordContext.update();
+ recordDepth.update();
+ recordImage.update();
+ recordUser.update();
+ }
}
//--------------------------------------------------------------
@@ -160,8 +243,13 @@ void testApp::draw(){
ofSetColor(255-fadetime,255-fadetime,255-fadetime); //for feedback
- vp1.draw(lambda,controllers,xshift,yshift,list,transparentBlack,note,mode,controller_colours,controlColours,scale,fscale,noteRandomiseColours?colShift:0.0f);
- vp2.draw(lambda,controllers,reversemain?-xshift:xshift,yshift,list,transparentBlack,note,mode,controller_colours,controlColours,reversemain?1.0f/scale:scale,reversemain?1.0f/fscale:fscale,noteRandomiseColours?colShift:0.0f);
+ //vp1.draw(lambda,controllers,xshift,yshift,list,transparentBlack,note,mode,controller_colours,controlColours,scale,fscale,noteRandomiseColours?colShift:0.0f);
+ //vp2.draw(lambda,controllers,reversemain?-xshift:xshift,yshift,list,transparentBlack,note,mode,controller_colours,controlColours,reversemain?1.0f/scale:scale,reversemain?1.0f/fscale:fscale,noteRandomiseColours?colShift:0.0f);
+ for (int i=0;i<viewports.size();i++) {
+ bool even=!(i%2);
+ if (viewports[i]->isMapped) viewports[i]->mapdraw(lambda,controllers,even&&reversemain?-xshift:xshift,yshift,list,transparentBlack,note,mode,controller_colours,controlColours,even&&reversemain?1.0f/scale:scale,even&&reversemain?1.0f/fscale:fscale,noteRandomiseColours?colShift:0.0f);
+ else viewports[i]->draw(lambda,controllers,even&&reversemain?-xshift:xshift,yshift,list,transparentBlack,note,mode,controller_colours,controlColours,even&&reversemain?1.0f/scale:scale,even&&reversemain?1.0f/fscale:fscale,noteRandomiseColours?colShift:0.0f);
+ }
ofSetColor(255,255,255);
if (showFPS) ofDrawBitmapString(ofToString(ofGetFrameRate(), 2),20,20);
@@ -459,14 +547,21 @@ void testApp::gotMessage(ofMessage msg){
}
//--------------------------------------------------------------
-void testApp::refDragEvent(ofDragInfo &dragInfo){
- dragEvent(dragInfo);
-}
+
void testApp::dragEvent(ofDragInfo dragInfo, ofxFenster* win){
dragEvent(dragInfo);
}
void testApp::dragEvent(ofDragInfo dragInfo){
- printf("received file:%s\n",dragInfo.files[0].c_str());
+ printf("got draginfo: %s\n",dragInfo.files[0].c_str());
+ int sta=dragInfo.files[0].find_last_of("\\/")+1;
+ int len=(dragInfo.files[0].find_last_of(".")+4)-sta;
+ string filename=dragInfo.files[0].substr(sta,len);
+ printf("loading %s\n",filename.c_str());
+
+ list.load(filename);
+}
+void testApp::windowEvent(ofResizeEventArgs &args){
+ printf("window event\n");
}
void testApp::mousePressedEvent(ofMouseEventArgs &args) {
diff --git a/liveengine/src/testApp.h b/liveengine/src/testApp.h
index a03ad4b..e0a00cc 100755
--- a/liveengine/src/testApp.h
+++ b/liveengine/src/testApp.h
@@ -2,6 +2,7 @@
//#include <GL/glxew.h>
+#include "ofxOpenNI.h"
#include "ofMain.h"
#include "ofxXmlSettings.h"
@@ -94,6 +95,7 @@ enum PropertyAttribute {
class previewWindow;
class guiWindow;
+class kinectWindow;
//#define GRAB_TEXTURE
@@ -117,9 +119,9 @@ class testApp : public ofxFensterListener, public ofxMidiListener{
void dragEvent(ofDragInfo dragInfo);
void dragEvent(ofDragInfo dragInfo,ofxFenster* win);
- void refDragEvent(ofDragInfo &args);
void mousePressedEvent(ofMouseEventArgs &args);
void keyPressedEvent(ofKeyEventArgs &args);
+ void windowEvent(ofResizeEventArgs &args);
void makeColours();
@@ -151,9 +153,11 @@ class testApp : public ofxFensterListener, public ofxMidiListener{
float colShift;
viewport vp1,vp2;
+ vector<viewport*> viewports;
previewWindow *prevWin;
guiWindow *guiWin;
+ kinectWindow *kinectWin;
ofxFenster* win;
@@ -164,6 +168,7 @@ class testApp : public ofxFensterListener, public ofxMidiListener{
void newMidiMessage(ofxMidiEventArgs& eventArgs);
playlist list;
+
ofxPanel gui;
ofxToggle reversemain;
@@ -175,10 +180,33 @@ 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;
};
+class kinectWindow: public ofxFensterListener{
+public:
+ ~kinectWindow();
+ testApp *parent;
+ void setup();
+ void setParent(testApp *p);
+ void draw();
+};
+
class previewWindow: public ofxFensterListener{
public:
@@ -197,6 +225,7 @@ public:
void setParent(testApp *p);
void draw();
void dragEvent(ofDragInfo dragInfo,ofxFenster* win);
+ void windowMoved(int x, int y);
};
diff --git a/liveengine/src/viewport.cpp b/liveengine/src/viewport.cpp
index ce67b37..82ee5a0 100755
--- a/liveengine/src/viewport.cpp
+++ b/liveengine/src/viewport.cpp
@@ -1,11 +1,62 @@
#include "viewport.h"
+//texture binding with normalised coords
+void bindTexture(ofBaseHasTexture &t) {
+ ofTexture &tex = t.getTextureReference();
+ tex.bind();
+ glMatrixMode(GL_TEXTURE);
+ glPushMatrix();
+ glLoadIdentity();
+
+ ofTextureData texData = tex.getTextureData();
+ if(texData.textureTarget == GL_TEXTURE_RECTANGLE_ARB) {
+ glScalef(tex.getWidth(), tex.getHeight(), 1.0f);
+ } else {
+ glScalef(tex.getWidth() / texData.tex_w, tex.getHeight() / texData.tex_h, 1.0f);
+ }
+
+ glMatrixMode(GL_MODELVIEW);
+}
+void unbindTexture(ofBaseHasTexture &t) {
+ t.getTextureReference().unbind();
+
+ glMatrixMode(GL_TEXTURE);
+ glPopMatrix();
+ glMatrixMode(GL_MODELVIEW);
+}
+void bindTex(ofTexture &tex) {
+ tex.bind();
+
+ glMatrixMode(GL_TEXTURE);
+ glPushMatrix();
+ glLoadIdentity();
+
+ ofTextureData texData = tex.getTextureData();
+ if(texData.textureTarget == GL_TEXTURE_RECTANGLE_ARB) {
+ glScalef(tex.getWidth(), tex.getHeight(), 1.0f);
+ } else {
+ glScalef(tex.getWidth() / texData.tex_w, tex.getHeight() / texData.tex_h, 1.0f);
+ }
+
+ glMatrixMode(GL_MODELVIEW);
+}
+void unbindTex(ofTexture &tex) {
+ tex.unbind();
+
+ glMatrixMode(GL_TEXTURE);
+ glPopMatrix();
+ glMatrixMode(GL_MODELVIEW);
+}
+//--------------------------------------------------
viewport::viewport()
{
//ctor
}
+viewport::viewport(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy) {
+ setup(_w,_h,_x,_y,_r,_ox,_oy);
+}
void viewport::setup(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy) {
r=_r;
@@ -105,3 +156,186 @@ viewport::~viewport()
{
//dtor
}
+
+void viewport::setUG(ofxUserGenerator *_rUser){
+ rUser=_rUser;
+ isMapped=true;
+}
+
+//-------------------------
+mappedviewport::mappedviewport(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy) {
+ setup(_w,_h,_x,_y,_r,_ox,_oy);
+}
+void mappedviewport::setUG(ofxUserGenerator *_rUser){
+ rUser=_rUser;
+}
+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();
+ 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;i<w*2;i+=(w*fscale)) {
+ for (int j=starty;j<h*2;j+=(h*fscale)) {
+ rb2.draw(i,j,w*fscale,h*fscale);
+ }
+ }
+
+ float notewidth=w/NUM_NOTES;
+ float noteheight=h/NUM_CONTROLLERS;
+
+ ofPushStyle();
+
+ if (note>0) {
+ switch(mode) {
+ case BLOCKS:
+ for (int i=0;i<NUM_CONTROLLERS;i++){
+ ofSetColor(ofColor((controller_colours[i].r*controllers[i])>>7,(controller_colours[i].g*controllers[i])>>7,(controller_colours[i].b*controllers[i])>>7));
+ ofRect((note-START_NOTE)*notewidth,i*noteheight,notewidth,noteheight);
+ }
+ break;
+ case LIST:
+ if (list.lock()) { //if playlist is loaded
+ if (list.layers.find(note)!=list.layers.end()) {
+ ofPushMatrix();
+ ofTranslate(w/2,h/2);
+ ofScale(scale,scale,scale);
+ ofTranslate(-w/2,-h/2);
+ if (controlColours) list.layers[note]->draw(a,controllers,w,h,transparentBlack,colShift);
+ else list.layers[note]->draw(a,w,h,colShift);
+ ofPopMatrix();
+ }
+ list.unlock();
+ }
+ break;
+ }
+ }
+
+ rb1.end();
+
+ rb2.begin();
+ ofSetColor(255,255,255);
+ ofBackground(0,0,0);
+ //rb1.draw(0,0);
+
+ //map on kinect skeleton
+ bindTexture(rb1);
+
+ glPushMatrix();
+ glScalef(ofGetWidth()/640.0f,ofGetHeight()/480.0f, 1);
+ for (int i=0;i<rUser->getNumberOfTrackedUsers();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);
+ glVertex3i(u->hip.position[1].X, u->hip.position[1].Y,u->hip.position[1].Z);
+ glVertex3i(u->right_shoulder.position[1].X, u->right_shoulder.position[1].Y,u->right_shoulder.position[1].Z);
+ 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);
+ glVertex3i(u->hip.position[1].X, u->hip.position[1].Y,0);
+ glVertex3i(u->right_shoulder.position[1].X, u->right_shoulder.position[1].Y,0);
+ 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 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);
+ glVertex3i(u->hip.position[0].X, u->hip.position[0].Y,0);
+ glVertex3i(u->left_shoulder.position[1].X, u->left_shoulder.position[1].Y,0);
+ 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));
+ targ.addVertex(c2);
+ targ.addTexCoord(ofVec2f(1,0));
+ targ.addVertex(c3);
+ targ.addTexCoord(ofVec2f(0,1));
+ targ.addVertex(c3);
+ targ.addTexCoord(ofVec2f(0,1));
+ targ.addVertex(c2);
+ targ.addTexCoord(ofVec2f(1,0));
+ 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);
+
+
+ rb2.end();
+
+ ofPushMatrix();
+ ofTranslate(x+(w/2),y+(h/2));
+ ofRotate(r);
+ //ofTranslate(-abs(sin(ofDegToRad(r))*h/2)-abs(cos(ofDegToRad(r))*w/2),-abs(sin(ofDegToRad(r))*w/2)-abs(cos(ofDegToRad(r))*h/2));
+ ofTranslate(ox,oy);
+
+ rb2.draw(0,0);
+
+ ofPopStyle();
+
+ ofPopMatrix();
+
+}
diff --git a/liveengine/src/viewport.h b/liveengine/src/viewport.h
index 4f29a5b..350ea5d 100755
--- a/liveengine/src/viewport.h
+++ b/liveengine/src/viewport.h
@@ -1,6 +1,7 @@
#ifndef VIEWPORT_H
#define VIEWPORT_H
+#include "ofxOpenNI.h"
#include "ofMain.h"
#include "playlist.h"
@@ -13,21 +14,40 @@
#define BLOCKS 1
#define LIST 2
-
+void bindTexture(ofBaseHasTexture &t);
+void unbindTexture(ofBaseHasTexture &t);
+void bindTex(ofTexture &tex);
+void unbindTex(ofTexture &tex);
class viewport
{
public:
viewport();
- void setup(int w,int h,int x, int y,float r,int _ox,int _oy);
+ 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);
- virtual ~viewport();
+ 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);
+
+ virtual ~viewport();
+ void setUG(ofxUserGenerator *_rUser);
ofFbo rb1,rb2;
float r;
+ bool isMapped;
protected:
+ int x, y,w,h,ox,oy;
+
+ ofxUserGenerator *rUser;
private:
- int x, y,w,h,ox,oy;
+
+};
+
+class mappedviewport: public viewport {
+ 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;
};
#endif // VIEWPORT_H