Пример #1
0
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;
			}

		}
	}
}
Пример #3
0
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();
}