summaryrefslogtreecommitdiff
path: root/06_performance/src/oni.cpp
diff options
context:
space:
mode:
authorTim <tim@lan184-102.dhcp.ulster.ac.uk>2013-06-20 18:25:10 +0100
committerTim <tim@lan184-102.dhcp.ulster.ac.uk>2013-06-20 18:25:10 +0100
commit1ffdeed6aedb75809255050261af16849cad2258 (patch)
tree191eece9b5994902598f0415ceb2ffb0715c84e9 /06_performance/src/oni.cpp
parent138e1b84ee55246bd70e1ca21155de16690ea86d (diff)
very nearly good
Diffstat (limited to '06_performance/src/oni.cpp')
-rw-r--r--06_performance/src/oni.cpp50
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