KVertex kKinect::getPosition(void) { mContext.WaitAndUpdateAll(); /* Anzahl der User auslesen und in Objekten speichern */ // number of users read and save to objects nUsers=1; user.GetUsers(pUser, nUsers); if(nUsers>0) { /* User dem Skeleton zuweisen */ // assign users to skeleton xn::SkeletonCapability pSkeleton = user.GetSkeletonCap(); if(skeleton!=0) { delete skeleton; skeleton = 0; } skeleton=new xn::SkeletonCapability(pSkeleton); if(skeleton->IsCalibrated(pUser[0])) { /* Alle Körperteile auswählen */ // select all parts of the body skeleton->SetSkeletonProfile(XN_SKEL_PROFILE_ALL); /* Kopf initialisieren */ // head initialize XnSkeletonJointTransformation head; skeleton->StartTracking(pUser[0]); skeleton->GetSkeletonJoint(pUser[0], XN_SKEL_HEAD, head); if(head.position.fConfidence && head.orientation.fConfidence) { /* std::cout << "x: " << head.position.position.X << ", " << "y: " << head.position.position.Y << ", " << "z: " << head.position.position.Z << " " << "[x*x2]: "<<(head.position.position.X*KProgram::x2) <<", "<< "[-y*y2]: "<<(-(head.position.position.Y+200.0)*KProgram::y2)<<", "<< "[z*z2]: "<<(head.position.position.Z*KProgram::z2) << std::endl; */ //"x2: " << head.position.position.X/SCREEN_HEIGTH_MM << //"y2: " << (head.position.position.Y+200.0)/SCREEN_HEIGTH_MM << //std::endl; return KVertex(head.position.position.X*KProgram::x2, -(head.position.position.Y+200.0)*KProgram::y2, head.position.position.Z*KProgram::z2, KRGBColor()); } } //else //printf("[kKinect] skeleton->IsCalibrated for user 0 returning false...\n"); } //else // printf("[kKinect] nUsers is 0, sorry sucker. Or hit 'c'[Enter] to calibrate a user...\n"); return KVertex(); }
void KItems::createItems(void) { // If there is something to create... do it if( mItemNumber > 0 ){ // Create a field to save circles in mItemField = new KCircle[mItemNumber]; mItemFieldSize = mItemNumber; // Create the depthstep and the startdepth float depthStep = 1.0f / mItemFieldSize; float startDepth = mItemsInFront*depthStep; // Initalize the random std::srand(static_cast<unsigned int>(std::time(0))); //Create the circles: for(int i = 0 ; i < mItemFieldSize ; i++){ mItemField[i].mCenter = KVertex( 0.7f * ((std::rand()%1001) / 1000.0f - 0.5f) + 0.5f, 0.7f * ((std::rand()%1001) / 1000.0f - 0.5f) + 0.5f, startDepth - i * depthStep, KRGBColor(ITEM_COLOR)); mItemField[i].mRadius = ITEM_SIZE; //DEBUG if(mItemField[i].mCenter.mX >= 0.95f || mItemField[i].mCenter.mX <= 0.05 || mItemField[i].mCenter.mY >= 0.95 || mItemField[i].mCenter.mY <= 0.05) int x = 1+1; // Make the nearer nearer to the center if(i < mItemsInFront){ mItemField[i].mCenter.mX = (mItemField[i].mCenter.mX - 0.5f) / 2.0f + 0.5f; mItemField[i].mCenter.mY = (mItemField[i].mCenter.mY - 0.5f) / 2.0f + 0.5f; } } } }
KVertex kKinect::getPosition(void) { mContext.WaitAndUpdateAll(); /* Anzahl der User auslesen und in Objekten speichern */ nUsers=1; user.GetUsers(pUser, nUsers); if(nUsers>0) { /* User dem Skeleton zuweisen */ xn::SkeletonCapability pSkeleton = user.GetSkeletonCap(); if(skeleton!=0) { delete skeleton; skeleton = 0; } skeleton=new xn::SkeletonCapability(pSkeleton); if(skeleton->IsCalibrated(pUser[0])) { /* Alle Körperteile auswählen */ skeleton->SetSkeletonProfile(XN_SKEL_PROFILE_ALL); /* Kopf initialisieren */ XnSkeletonJointTransformation head; skeleton->StartTracking(pUser[0]); skeleton->GetSkeletonJoint(pUser[0], XN_SKEL_HEAD, head); if(head.position.fConfidence && head.orientation.fConfidence) { /*std::cout << "x: " << head.position.position.X << "\t y: " << head.position.position.Y << "x2: " << head.position.position.X/SCREEN_HEIGTH_MM << "y2: " << (head.position.position.Y+200.0)/SCREEN_HEIGTH_MM << std::endl;*/ return KVertex(head.position.position.X*KProgram::x2, -(head.position.position.Y+200.0)*KProgram::y2, head.position.position.Z*KProgram::z2, KRGBColor()); } } } return KVertex(); }