diff options
Diffstat (limited to '06_performance/src/oni.cpp')
| -rw-r--r-- | 06_performance/src/oni.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/06_performance/src/oni.cpp b/06_performance/src/oni.cpp index 0cd5efc..099dd87 100644 --- a/06_performance/src/oni.cpp +++ b/06_performance/src/oni.cpp @@ -96,6 +96,34 @@ void syncOniPlayer::drawCloud(int step){ return; } +void syncOniPlayer::drawPoints(float birth,float life,float dx,float dy, float dz){ + if (!drawable) return; + const XnDepthPixel* depthmap=players[0]->getDepthGenerator().GetDepthMap(); + const ofPixels& pixels=players[0]->getImagePixels(); + int range=1700; + int dmw=players[0]->getWidth(); + int dmh=players[0]->getHeight(); + int step=pixels.getWidth()/dmw; + for (int o=0;o<birth;o++) { + int i=ofRandom(dmw); + int j=ofRandom(dmh); + ofPoint p= players[0]->projectiveToWorld(ofPoint(i,j,(float)depthmap[j*dmw+i])); + if (p.z <100 || p.z>range) continue; + points.push_back(fpoint(p.x, p.y, p.z,pixels[((j*step*dmw)+(i*step))*3],pixels[((j*step*dmw)+(i*step))*3]+1,pixels[((j*step*dmw)+(i*step))*3]+2)); + //fpoint f=fpoint(p.x, p.y, p.z,pixels[((j*step*dmw)+(i*step))*3],pixels[((j*step*dmw)+(i*step))*3]+1,pixels[((j*step*dmw)+(i*step))*3]+2); + //f.draw(life,dx,dy,dz); + } + std::list<fpoint>::iterator i = points.begin(); + while (i != points.end()) + { + if (i->draw(life,dx,dy,dz)) i = points.erase(i); + else ++i; + ++i; + } +} +int syncOniPlayer::getNumParticles(){ + return points.size(); +} void syncOniPlayer::stop(){ soundplayer.stop(); for (int i=0;i<players.size();i++) { @@ -139,6 +167,9 @@ void oniManager::startPlayer(int newplayer){ players[playing].play(); } } +int oniManager::getNumClips(){ + return players.size(); +} void oniManager::update(){ if (players.size()>playing&&playing>-1) players[playing].update(); } @@ -155,4 +186,23 @@ void oniManager::previous(){ void oniManager::next(){ int newp=playing-1<0?players.size()-1:playing-1; startPlayer(newp); +} +int oniManager::getNumParticles(){ + if (players.size()>playing&&playing>-1) return players[playing].getNumParticles(); + else return 0; +} +void oniManager::drawPoints(float size,float birth,float life,float dx,float dy, float dz){ + if (players.size()>playing&&playing>-1) { + glEnable(GL_PROGRAM_POINT_SIZE); + glEnable(GL_POINT_SMOOTH); + glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); + glEnable( GL_BLEND ); + glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + glPointSize( size); + glBegin(GL_POINTS); + players[playing].drawPoints(birth,life,dx,dy,dz); + glEnd(); + glDisable( GL_BLEND ); + glDisable(GL_PROGRAM_POINT_SIZE); + } }
\ No newline at end of file |
