//-------------------------------------------------------------- void testApp::update() { kinect.update(); if(kinect.isNewSkeleton()) { for( int i = 0; i < kinect.getSkeletons().size(); i++) { if(kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_HEAD) != kinect.getSkeletons().at(i).end()) { // just get the first one SkeletonBone headBone = kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_HEAD)->second; SkeletonBone lHandBone = kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_HAND_LEFT)->second; SkeletonBone rHandBone = kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_HAND_RIGHT)->second; ofVec3f hb( headBone.getScreenPosition().x, headBone.getScreenPosition().y, 0 ); head = head.getInterpolated(hb, 0.5); head.z = ofInterpolateCosine( head.z, headBone.getStartPosition().x, 0.5) + 0.1; ofVec3f lhb(lHandBone.getScreenPosition().x, lHandBone.getScreenPosition().y, 0); lHand = lHand.getInterpolated( lhb, 0.5); lHand.z = ofInterpolateCosine( lHand.z, lHandBone.getStartPosition().x, 0.5); ofVec3f rhb(rHandBone.getScreenPosition().x, rHandBone.getScreenPosition().y, 0); rHand = rHand.getInterpolated( rhb, 0.5); rHand.z = ofInterpolateCosine( rHand.z, rHandBone.getStartPosition().x, 0.5); cout << headBone.getScreenPosition() << endl; cout << rHandBone.getScreenPosition() << endl; cout << lHandBone.getScreenPosition() << endl; //cout << kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_HEAD)->second.getScreenPosition() << endl; //cout << kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_HAND_LEFT)->second.getScreenPosition() << endl; //cout << kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_HAND_RIGHT)->second.getScreenPosition() << endl; jointDistance = head.distance(rHand); jointDistance += lHand.distance(rHand); jointDistance += lHand.distance(head); hasSkeleton = true; return; } } } }
//-------------------------------------------------------------- void testApp::draw(){ ofDisableAlphaBlending(); ofSetColor(255); kinect.draw(0, 0); ofEnableAlphaBlending(); for(int i=0; i<circles.size(); i++) { ofFill(); ofSetHexColor(0xf6c738); circles[i].get()->draw(); } for(int i=0; i<boxes.size(); i++) { ofFill(); ofSetHexColor(0xBF2545); boxes[i].get()->draw(); } for(int i=0; i<vehicles.size(); i++) { ofFill(); ofSetColor(50,200,50); vehicles[i].get()->draw(); } for(int i = 0 ; i < tracks.size() ; i++){ ofFill(); ofSetColor(40,180,70); tracks[i].get()->draw(); } LHumerusTrack.draw(); RHumerusTrack.draw(); LRadiusTrack.draw(); RRadiusTrack.draw(); ofSetColor(50,50,200); //train.draw(); // draw the ground box2d.drawGround(); string info = ""; /*info += "Press [c] for circles\n"; info += "Press [b] for blocks\n"; info += "Total Bodies: "+ofToString(box2d.getBodyCount())+"\n"; info += "Total Joints: "+ofToString(box2d.getJointCount())+"\n\n";*/ info += "FPS: "+ofToString(ofGetFrameRate(), 1)+"\n"; info += "Time: "+ofToString(ofGetElapsedTimef())+"\n"; info += "Score: "+ofToString(score)+"\n"; info += "Level: "+ofToString(level)+"\n"; ofFill(); ofSetColor(255); ofDrawBitmapString(info, 30, 30); //SCENARIO ELEMENTS ofSetColor(50,100,230,180); ofRect(0,ofGetHeight()-50,ofGetWidth(),50); //THE RIVER!!! ofSetColor(255); ambientCanyon.draw(0,0); //THE VALLEY!! if(kinect.isNewSkeleton()) { ofSetColor(255); for(int i = 0 ; i < kinect.getSkeletons().size(); i++) { if(kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_HEAD) != kinect.getSkeletons().at(i).end()) { SkeletonBone headBone = kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_HEAD)->second; ofVec2f headScreenPosition(headBone.getScreenPosition().x, headBone.getScreenPosition().y); if(started == false){ ofSetColor(255,255,100); ofCircle(headScreenPosition.x+50, headScreenPosition.y-30, 25); ofSetColor(0); ofDrawBitmapString("START",headScreenPosition.x+30, headScreenPosition.y-30); } //RIGHT SHOULDER ofSetColor(100,80,40); if(kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_SHOULDER_RIGHT) != kinect.getSkeletons().at(i).end()) { SkeletonBone RShoulderBone = kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_SHOULDER_RIGHT)->second; ofVec2f partScreenPosition(RShoulderBone.getScreenPosition().x, RShoulderBone.getScreenPosition().y); ofCircle(partScreenPosition.x, partScreenPosition.y, 10); //LEFT SHOULDER if(kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_SHOULDER_LEFT) != kinect.getSkeletons().at(i).end()) { SkeletonBone LShoulderBone = kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_SHOULDER_LEFT)->second; ofVec2f partScreenPosition(LShoulderBone.getScreenPosition().x, LShoulderBone.getScreenPosition().y); ofCircle(partScreenPosition.x, partScreenPosition.y, 10); //RIGHT HAND if(kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_WRIST_RIGHT) != kinect.getSkeletons().at(i).end()) { SkeletonBone RHandBone = kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_WRIST_RIGHT)->second; ofVec2f partScreenPosition(RHandBone.getScreenPosition().x, RHandBone.getScreenPosition().y); ofCircle(partScreenPosition.x, partScreenPosition.y, 10); //LEFT HAND if(kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_WRIST_LEFT) != kinect.getSkeletons().at(i).end()) { SkeletonBone LHandBone = kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_WRIST_LEFT)->second; ofVec2f partScreenPosition(LHandBone.getScreenPosition().x, LHandBone.getScreenPosition().y); ofCircle(partScreenPosition.x, partScreenPosition.y, 10); //RIGHT ELBOW if(kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_ELBOW_RIGHT) != kinect.getSkeletons().at(i).end()) { SkeletonBone RElbowBone = kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_ELBOW_RIGHT)->second; ofVec2f partScreenPosition(RElbowBone.getScreenPosition().x, RElbowBone.getScreenPosition().y); ofCircle(partScreenPosition.x, partScreenPosition.y, 10); //LEFT ELBOW if(kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_ELBOW_LEFT) != kinect.getSkeletons().at(i).end()) { SkeletonBone LElbowBone = kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_ELBOW_LEFT)->second; ofVec2f partScreenPosition(LElbowBone.getScreenPosition().x, LElbowBone.getScreenPosition().y); ofCircle(partScreenPosition.x, partScreenPosition.y, 10); //Starting the game... if(started == false){ if( RHandBone.getScreenPosition().x > (headScreenPosition.x+50) && RHandBone.getScreenPosition().x < (headScreenPosition.x+80) && RHandBone.getScreenPosition().y > (headScreenPosition.y-30) && RHandBone.getScreenPosition().y < (headScreenPosition.y )) { started = true; explosion.play(); } } //Con todos los bones guardados... float LHumerusX = LElbowBone.getScreenPosition().x - LShoulderBone.getScreenPosition().x; float LHumerusY = LElbowBone.getScreenPosition().y - LShoulderBone.getScreenPosition().y; float LRadiusX = LHandBone.getScreenPosition().x - LElbowBone.getScreenPosition().x; float LRadiusY = LHandBone.getScreenPosition().y - LElbowBone.getScreenPosition().y; float RHumerusX = RElbowBone.getScreenPosition().x - RShoulderBone.getScreenPosition().x; float RHumerusY = RElbowBone.getScreenPosition().y - RShoulderBone.getScreenPosition().y; float RRadiusX = RHandBone.getScreenPosition().x - RElbowBone.getScreenPosition().x; float RRadiusY = RHandBone.getScreenPosition().y - RElbowBone.getScreenPosition().y; float LHumerusAngle = 90 - atan2(LHumerusX,LHumerusY)*180/M_PI; LHumerusTrack.setPosition((LElbowBone.getScreenPosition().x + LShoulderBone.getScreenPosition().x) / 2, (LElbowBone.getScreenPosition().y + LShoulderBone.getScreenPosition().y) / 2); LHumerusTrack.setRotation(LHumerusAngle); float RHumerusAngle = 90 - atan2(RHumerusX,RHumerusY)*180/M_PI; RHumerusTrack.setPosition((RElbowBone.getScreenPosition().x + RShoulderBone.getScreenPosition().x) / 2, (RElbowBone.getScreenPosition().y + RShoulderBone.getScreenPosition().y) / 2); RHumerusTrack.setRotation(RHumerusAngle); float LRadiusAngle = 90 - atan2(LRadiusX,LRadiusY)*180/M_PI; LRadiusTrack.setPosition((LHandBone.getScreenPosition().x + LElbowBone.getScreenPosition().x) / 2, (LHandBone.getScreenPosition().y + LElbowBone.getScreenPosition().y) / 2); LRadiusTrack.setRotation(LRadiusAngle); float RRadiusAngle = 90 - atan2(RRadiusX,RRadiusY)*180/M_PI; RRadiusTrack.setPosition((RHandBone.getScreenPosition().x + RElbowBone.getScreenPosition().x) / 2, (RHandBone.getScreenPosition().y + RElbowBone.getScreenPosition().y) / 2); RRadiusTrack.setRotation(RRadiusAngle); } } } } } } return; } } } }
//-------------------------------------------------------------- void ofApp::update() { //kinect stuff kinect.update(); if(kinect.isNewSkeleton()) { for( int i = 0; i < kinect.getSkeletons().size(); i++) { // has a head? probably working ok then :) if(kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_HEAD) != kinect.getSkeletons().at(i).end()) { // just get the first one //SkeletonBone headBone = kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_HEAD)->second; //ofVec2f headScrenPosition( headBone.getScreenPosition().x, headBone.getScreenPosition().y); SkeletonBone lHand = kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_HAND_LEFT)->second; ofVec2f lHandScrenPosition( lHand.getScreenPosition().x, lHand.getScreenPosition().y); SkeletonBone rHand = kinect.getSkeletons().at(i).find(NUI_SKELETON_POSITION_HAND_RIGHT)->third; ofVec2f rHandScreenPosition( rHand.getScreenPosition().x, rHand.getScreenPosition().y); //cerr << headBone; handDist = ofDistSquared(lHand.getScreenPosition().x, lHand.getScreenPosition().y, rHand.getScreenPosition().x, rHand.getScreenPosition().y); return; } } } vidGrabber.update(); float time = ofGetElapsedTimef(); //Get time float oldValue3d = ofNoise(meshRadius, time); //Change vertices for (int i=0; i<mesh.getNumVertices(); i++) { //---------------------------------// //set mesh color from video (even though it's not working right now) //---------------------------------// // Map i to the width and height of the image ( or video ) so that color can be sampled from the corresponding pixel int widthSampleIndex = ofMap(i, 0, mesh.getNumVertices(), 0, vidGrabber.getWidth()); int heightSampleIndex = ofMap(i, 0, mesh.getNumVertices(), 0, vidGrabber.getHeight()); if(vidGrabber.isFrameNew()) { vidPixels = vidGrabber.getPixelsRef(); //Grab color from pixel and set vertex color to it //c = vidPixels.getColor(widthSampleIndex, heightSampleIndex); image.setFromPixels(vidGrabber.getPixelsRef()); c = image.getColor(widthSampleIndex, heightSampleIndex); cerr << ( c )<< endl ; } mesh.addColor(c); //---------------------------------// //displace vertice here using prelin noise ( After attempting this approach I think I would go with GLSL shaders next time. While each point follows the noise with this there's no continuity from point to point so it looks random. //---------------------------------// ofVec3f p = mesh.getVertex( i ); //Get Perlin noise value ( not sure which is best float value = ofNoise(100*i); float value2d = ofNoise(100 * i, time); float value3d = ofNoise(100 * i, i, time); ofVec3f center = mesh.getCentroid(); float dist = center.distance(p); //find scale value so that the vertice can be moved float scaleValue = (dist*(oldValue3d))/dist; float oldValue3d = value3d; //Change coordinate of vertex in relation to the center of the sphere ofVec3f newP = p.scale(scaleValue*(10*handDist)); //mesh.setVertex(i, newP); } }