summaryrefslogtreecommitdiff
path: root/06_performance/src/oni.h
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2013-12-12 22:05:38 +0000
committerTim Redfern <tim@eclectronics.org>2013-12-12 22:05:38 +0000
commitfbbc891991aaef716b7e56870faa25a11b169ef1 (patch)
tree1cc49cca41a2a6f4b769d48eb3189d24410f9f04 /06_performance/src/oni.h
working setup for documentation: glitch gisabledHEADmaster
Diffstat (limited to '06_performance/src/oni.h')
-rw-r--r--06_performance/src/oni.h139
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