diff options
Diffstat (limited to 'offsetProject/src/ofApp.cpp')
| -rw-r--r-- | offsetProject/src/ofApp.cpp | 154 |
1 files changed, 152 insertions, 2 deletions
diff --git a/offsetProject/src/ofApp.cpp b/offsetProject/src/ofApp.cpp index f65746e..7c5428c 100644 --- a/offsetProject/src/ofApp.cpp +++ b/offsetProject/src/ofApp.cpp @@ -60,6 +60,17 @@ void ofApp::setup() { ofSetFrameRate(60); + kinect.setRegistration(true); + kinect.init(); + kinect.open(); + colourImage.allocate(kinect.width, kinect.height); + depthImage.allocate(kinect.width, kinect.height); + farThreshold = 70; + angle = 0; + kinect.setCameraTiltAngle(angle); + kinect.enableDepthNearValueWhite(true); + kinect.setDepthClipping(0,4000); + store.start(); mode=MODE_COLOURTILES; @@ -72,6 +83,51 @@ void ofApp::update() { ofSetWindowTitle(ofToString(ofGetFrameRate())); + kinect.update(); + + // there is a new frame and we are connected + if(kinect.isFrameNew()) { + + depthImage.setFromPixels(kinect.getDepthPixels(), kinect.width, kinect.height); + colourImage.setFromPixels(kinect.getPixels(), kinect.width, kinect.height); + + depthImage.threshold(farThreshold); + + //threshold needs to be multiplied by the original + depthImage2.setFromPixels(kinect.getDepthPixels(), kinect.width, kinect.height); + depthImage*=depthImage2; + + //depthImage.extend(extend_w,extend_h); + //colourImage.extend(extend_w,extend_h); + + int h=ceil(ofGetHeight()/MAX_TILE_SIZE); + int w=(h*4)/3; + depthImage.resize(w,h); + colourImage.resize(w,h); + + // mark pixels and texture dirty + depthImage.flagImageChanged(); + colourImage.flagImageChanged(); + + /* + ofxCvColorImage *prevCol=&colourImage; + ofxCvGrayscaleImage *prevDepth=&depthImage; + + + for (int i=0;i<colourTiles.size();i++){ + colourTiles[i].scaleIntoMe(*prevCol); + depthTiles[i].scaleIntoMe(*prevDepth); + prevCol=&colourTiles[i]; + prevDepth=&depthTiles[i]; + + colourTiles[i].flagImageChanged(); + depthTiles[i].flagImageChanged(); + } + */ + } + + store.update(); + } @@ -84,7 +140,39 @@ void ofApp::draw() { ofSetColor(255, 255, 255); - store.draw(); + int w,xstart,ystart,kinexstart; + + switch(mode){ + case MODE_COLOURTILES: + //store.draw(); + xstart=(ofGetWidth()/2)-((colourImage.getHeight()/2)*MAX_TILE_SIZE); + ystart=(ofGetHeight()/2)-((colourImage.getHeight()/2)*MAX_TILE_SIZE); + kinexstart=(colourImage.getWidth()/2)-(colourImage.getHeight()/2); + ofPushMatrix(); + ofTranslate(xstart,ystart); + w=colourImage.getWidth(); + for (int i=0;i<depthImage.getHeight();i++){ + for (int j=0;j<depthImage.getHeight();j++){ + uint8_t* ppt=&colourImage.getPixels()[(j*w+(w-(i+kinexstart)))*3]; + store.get_image(ofColor(ppt[0],ppt[1],ppt[2])).draw(i*MAX_TILE_SIZE,j*MAX_TILE_SIZE); + //ofSetColor(ppt[0],ppt[1],ppt[2]); + //ofRect(i*MAX_TILE_SIZE,j*MAX_TILE_SIZE,MAX_TILE_SIZE,MAX_TILE_SIZE); + } + } + ofPopMatrix(); + break; + + case MODE_DEPTH: + + depthImage.draw(0,0,ofGetWidth(),ofGetHeight()); + break; + + case MODE_COMPONENTS: + + depthImage.draw(0,0, 640,480); + colourImage.draw(640,0, 640,480); + break; + } } @@ -100,10 +188,72 @@ void ofApp::exit() { void ofApp::keyPressed (int key) { switch (key) { + case '>': + case '.': + farThreshold ++; + if (farThreshold > 255) farThreshold = 255; + break; + + case '<': + case ',': + farThreshold --; + if (farThreshold < 0) farThreshold = 0; + break; + + + case 'w': + kinect.enableDepthNearValueWhite(!kinect.isDepthNearValueWhite()); + break; + + case 'o': + kinect.setCameraTiltAngle(angle); // go back to prev tilt + kinect.open(); + break; + + case 'c': + kinect.setCameraTiltAngle(0); // zero the tilt + kinect.close(); + break; + + case '1': + kinect.setLed(ofxKinect::LED_GREEN); + break; + + case '2': + kinect.setLed(ofxKinect::LED_YELLOW); + break; + + case '3': + kinect.setLed(ofxKinect::LED_RED); + break; + + case '4': + kinect.setLed(ofxKinect::LED_BLINK_GREEN); + break; + + case '5': + kinect.setLed(ofxKinect::LED_BLINK_YELLOW_RED); + break; + + case '0': + kinect.setLed(ofxKinect::LED_OFF); + break; + + case OF_KEY_UP: + angle++; + if(angle>30) angle=30; + kinect.setCameraTiltAngle(angle); + break; + + case OF_KEY_DOWN: + angle--; + if(angle<-30) angle=-30; + kinect.setCameraTiltAngle(angle); + break; case OF_KEY_LEFT: mode--; - if (mode<0) mode==NUM_MODES-1; + if (mode<0) mode=NUM_MODES-1; break; case OF_KEY_RIGHT: |
