diff options
Diffstat (limited to '06_performance/src/oni.h')
| -rw-r--r-- | 06_performance/src/oni.h | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/06_performance/src/oni.h b/06_performance/src/oni.h new file mode 100644 index 0000000..b0b9303 --- /dev/null +++ b/06_performance/src/oni.h @@ -0,0 +1,139 @@ +#include "ofMain.h" +#include "ofxXmlSettings.h" +#include "ofxOpenNI.h" + +//1. fix gravity +//2. make sure figure never gets lost - pull back a bit +//3. a way to trigger the figure w/no sound + +//a colour video particle +class fpoint{ + public: + fpoint(){active=false;}; + fpoint(float _x,float _y, float _z, unsigned char _r,unsigned char _g,unsigned char _b){ + setup(x,y,z,r,g,b); + } + void setup(float _x,float _y, float _z, unsigned char _r,unsigned char _g,unsigned char _b){ + x=_x;y=_y;z=_z;r=_r;g=_g;b=_b;st=ofGetElapsedTimef();active=true; + } + float x,y,z; + float st; + unsigned char r,g,b; + bool active; + bool draw(float life,float dx,float dy,float dz,float size=5.0f,float interval=0.05f){ + if (!active) { + return true; + } + float l=ofGetElapsedTimef()-st; + if (life>l) { + glPointSize((1.0f-(l/life))*size); + glBegin(GL_POINTS); + glColor3ub(r,g,b); + //glColor4ub(r,g,b,(unsigned char)255); // ((l/life)*255.0f)); + glVertex3f(x-(pow(l,2)*dx),y-(pow(l,2)*dy),z-(pow(l,2)*dz)); + glEnd(); + return true; + } + else { + active=false; + return false; + } + } + bool drawdx(float life,float dx,float dy,float dz,float size,float interval){ + if (!active) { + return true; + } + float l=ofGetElapsedTimef()-st; + if (life>l) { + x-=(pow(interval,2)*dx); + y-=(pow(interval,2)*dy); + z-=(pow(interval,2)*dz); + glPointSize((1.0f-(l/life))*size); + glBegin(GL_POINTS); + glColor3ub(r,g,b); + //glColor4ub(r,g,b,(unsigned char)255); // ((l/life)*255.0f)); + glVertex3f(x,y,z); + glEnd(); + return true; + } + else { + active=false; + return false; + } + } +}; +class syncOniPlayer{ + public: + syncOniPlayer() { + drawable=false; + gamma=3.0f; + LUT=NULL; + makeLUT(); + playerActive=false; +//<<<<<<< HEAD + points.reserve(100000); //operator new seems to be causing crshes? +//======= +//>>>>>>> fd8dc2aa23c4bbc297e835e4f920aaf5342aba5e + } + ~syncOniPlayer(){ + stop(); + //if (LUT) delete[] LUT; + } + void makeLUT(){ + if (NULL==LUT){ + LUT=new uint8_t[0xff]; + } + for (int i=0;i<0xFF;i++) { + LUT[i]=(uint8_t)(pow(((float)i)/255.0f,gamma)*255.0f); + } + } + void addPlayer(string name); + void play(); + void update(); + void pause(); + bool isPlaying(); + int getCurrentFrame(); + float getPosition(); + int getNumParticles(); + string getCurrentFile(); + void drawWindows(); + void drawCloud(int step); + void drawPoints(float birth,float life,float dx,float dy, float dz,float size); + void stop(); + string audio; + + private: + vector<ofxOpenNI*> players; + vector<string> filenames; + ofSoundPlayer soundplayer; + bool drawable; + vector<fpoint> points; + set<int> pointPool; + float gamma; + uint8_t *LUT; + float startTime; + bool playerActive; + float lastTime; +}; +//======================================== +class oniManager{ + public: + void init(const char* filename); + void startPlayer(int num); + int getNumClips(); + int getNumParticles(); + syncOniPlayer* getCurrentPlayer(); +//<<<<<<< HEAD + string getCurrentFile(); +//======= +//>>>>>>> fd8dc2aa23c4bbc297e835e4f920aaf5342aba5e + void update(); + void drawWindows(); + void drawCloud(int step); + void drawPoints(float size,float birth,float life,float dx,float dy, float dz); + void previous(); + void next(); + int playing; + ofxXmlSettings XML; + vector<syncOniPlayer> players; +};
\ No newline at end of file |
