void Nui_DrawSkeleton( bool bBlank, NUI_SKELETON_DATA * pSkel, int WhichSkeletonColor ) { if( bBlank ) { Nui_BlankSkeletonScreen(); } int scaleX = 320; //scaling up to image coordinates int scaleY = 240; float fx=0,fy=0; int i; for (i = 0; i < NUI_SKELETON_POSITION_COUNT; i++) { NuiTransformSkeletonToDepthImageF( pSkel->SkeletonPositions[i], &fx, &fy ); m_Points[i].x = (int) ( fx * scaleX + 0.5f ); m_Points[i].y = (int) ( fy * scaleY + 0.5f ); } /* Nui_DrawSkeletonSegment(pSkel,4,NUI_SKELETON_POSITION_HIP_CENTER, NUI_SKELETON_POSITION_SPINE, NUI_SKELETON_POSITION_SHOULDER_CENTER, NUI_SKELETON_POSITION_HEAD); Nui_DrawSkeletonSegment(pSkel,5,NUI_SKELETON_POSITION_SHOULDER_CENTER, NUI_SKELETON_POSITION_SHOULDER_LEFT, NUI_SKELETON_POSITION_ELBOW_LEFT, NUI_SKELETON_POSITION_WRIST_LEFT, NUI_SKELETON_POSITION_HAND_LEFT); Nui_DrawSkeletonSegment(pSkel,5,NUI_SKELETON_POSITION_SHOULDER_CENTER, NUI_SKELETON_POSITION_SHOULDER_RIGHT, NUI_SKELETON_POSITION_ELBOW_RIGHT, NUI_SKELETON_POSITION_WRIST_RIGHT, NUI_SKELETON_POSITION_HAND_RIGHT); Nui_DrawSkeletonSegment(pSkel,5,NUI_SKELETON_POSITION_HIP_CENTER, NUI_SKELETON_POSITION_HIP_LEFT, NUI_SKELETON_POSITION_KNEE_LEFT, NUI_SKELETON_POSITION_ANKLE_LEFT, NUI_SKELETON_POSITION_FOOT_LEFT); Nui_DrawSkeletonSegment(pSkel,5,NUI_SKELETON_POSITION_HIP_CENTER, NUI_SKELETON_POSITION_HIP_RIGHT, NUI_SKELETON_POSITION_KNEE_RIGHT, NUI_SKELETON_POSITION_ANKLE_RIGHT, NUI_SKELETON_POSITION_FOOT_RIGHT); */ // Draw the joints in a different color for (i = 0; i < NUI_SKELETON_POSITION_COUNT ; i++) { if (pSkel->eSkeletonPositionTrackingState[i] != NUI_SKELETON_POSITION_NOT_TRACKED) { CvPoint p; p.x = m_Points[i].x; p.y = m_Points[i].y; cvLine(kinect_skeleton_image,p,p,g_JointColorTable[i],7); } } return; }
void CSkeletalViewerApp::Nui_GotSkeletonAlert( ) { NUI_SKELETON_FRAME SkeletonFrame; bool bFoundSkeleton = false; if( SUCCEEDED(m_pNuiInstance->NuiSkeletonGetNextFrame( 0, &SkeletonFrame )) ) { for( int i = 0 ; i < NUI_SKELETON_COUNT ; i++ ) { if( SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED ) { bFoundSkeleton = true; } } } // no skeletons! // if( !bFoundSkeleton ) { return; } // smooth out the skeleton data m_pNuiInstance->NuiTransformSmooth(&SkeletonFrame,NULL); // we found a skeleton, re-start the timer m_bScreenBlanked = false; m_LastSkeletonFoundTime = -1; // draw each skeleton color according to the slot within they are found. // bool bBlank = true; for( int i = 0 ; i < NUI_SKELETON_COUNT ; i++ ) { // Only distance-track the first skeleton bool first = true; // Show skeleton only if it is tracked, and the center-shoulder joint is at least inferred. if( SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED && SkeletonFrame.SkeletonData[i].eSkeletonPositionTrackingState[NUI_SKELETON_POSITION_SHOULDER_CENTER] != NUI_SKELETON_POSITION_NOT_TRACKED) { Nui_DrawSkeleton( bBlank, &SkeletonFrame.SkeletonData[i], GetDlgItem( m_hWnd, IDC_SKELETALVIEW ), i ); if (first) { first = false; // Update distance data Vector4 headPoint = SkeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_HEAD]; float xcoord, ycoord; USHORT depthValue; NuiTransformSkeletonToDepthImageF(headPoint, &xcoord, &ycoord, &depthValue); int depthInMM = (depthValue >> 3); ::PostMessageW(m_hWnd, WM_USER_UPDATE_DISTANCE, IDC_DISTANCE, depthInMM); // Update user data ::PostMessageW(m_hWnd, WM_USER_UPDATE_USER, IDC_USER, i); } bBlank = false; } }
void KinectGrabber::Kinect_GotSkeletonAlert( ) { NUI_SKELETON_FRAME SkeletonFrame; HRESULT hr = NuiSkeletonGetNextFrame( 0, &SkeletonFrame ); isSkeletonTracked=false; //POINT m_Points[NUI_SKELETON_POSITION_COUNT]; for( int i = 0 ; i < NUI_SKELETON_COUNT ; i++ ) { if( SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED ) { isSkeletonTracked=true; int scaleX = VIDEO_WIDTH; //scaling up to image coordinates int scaleY = VIDEO_HEIGHT; USHORT depthValue; float fx=0,fy=0; //POINT m_Points[NUI_SKELETON_POSITION_COUNT]; NUI_SKELETON_DATA * pSkel; for (int j = 0; j < NUI_SKELETON_POSITION_COUNT; j++) { pSkel=& SkeletonFrame.SkeletonData[i]; NuiTransformSkeletonToDepthImageF( pSkel->SkeletonPositions[j], &fx, &fy, &depthValue); m_Points[j].x = (int) ( fx * scaleX + 0.5f ); m_Points[j].y = (int) ( fy * scaleY + 0.5f ); // make sure to shift depth by 3 bits m_playerJointDepth[j] = depthValue >> 3; //m_playerJointDepth[j] = depthValue; } // Store the values of the head position of each skeleton headXValues[i] = m_Points[3].x; headYValues[i] = m_Points[3].y; headZValues[i] = m_playerJointDepth[3]; leftShoulderXValues[i]=m_Points[4].x; rightShoulderXValues[i]=m_Points[8].x; leftHandXValues[i]=m_Points[7].x; leftHandYValues[i]=m_Points[7].y; rightHandXValues[i]=m_Points[11].x; rightHandYValues[i]=m_Points[11].y; /* if(m_Points[3].x!=0){ //printf("headPosition"); //printf("head Z=%4.2f /r", m_Points[3].x); //printf("%d\n",m_Points[3].x); //return m_Points[NUI_SKELETON_POSITION_COUNT]; }else{ NuiSkeletonGetNextFrame( 0, &SkeletonFrame ); } */ /* float head_z=SkeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_HEAD].z; if (head_z!=0){ printf("head Z=%4.2f /r", head_z); }else{ NuiSkeletonGetNextFrame( 0, &SkeletonFrame ); } */ } else {
void CSkeletalViewerApp::Nui_DrawSkeleton( bool bBlank, NUI_SKELETON_DATA * pSkel, HWND hWnd, int WhichSkeletonColor ) { HGDIOBJ hOldObj = SelectObject(m_SkeletonDC,m_Pen[WhichSkeletonColor % m_PensTotal]); RECT rct; GetClientRect(hWnd, &rct); int width = rct.right; int height = rct.bottom; if( m_Pen[0] == NULL ) { m_Pen[0] = CreatePen( PS_SOLID, width / 80, RGB(255, 0, 0) ); m_Pen[1] = CreatePen( PS_SOLID, width / 80, RGB( 0, 255, 0 ) ); m_Pen[2] = CreatePen( PS_SOLID, width / 80, RGB( 64, 255, 255 ) ); m_Pen[3] = CreatePen( PS_SOLID, width / 80, RGB(255, 255, 64 ) ); m_Pen[4] = CreatePen( PS_SOLID, width / 80, RGB( 255, 64, 255 ) ); m_Pen[5] = CreatePen( PS_SOLID, width / 80, RGB( 128, 128, 255 ) ); } if( bBlank ) { PatBlt( m_SkeletonDC, 0, 0, width, height, BLACKNESS ); } int scaleX = width; //scaling up to image coordinates int scaleY = height; float fx=0,fy=0; int i; for (i = 0; i < NUI_SKELETON_POSITION_COUNT; i++) { NuiTransformSkeletonToDepthImageF( pSkel->SkeletonPositions[i], &fx, &fy ); m_Points[i].x = (int) ( fx * scaleX + 0.5f ); m_Points[i].y = (int) ( fy * scaleY + 0.5f ); } SelectObject(m_SkeletonDC,m_Pen[WhichSkeletonColor%m_PensTotal]); Nui_DrawSkeletonSegment(pSkel,4,NUI_SKELETON_POSITION_HIP_CENTER, NUI_SKELETON_POSITION_SPINE, NUI_SKELETON_POSITION_SHOULDER_CENTER, NUI_SKELETON_POSITION_HEAD); Nui_DrawSkeletonSegment(pSkel,5,NUI_SKELETON_POSITION_SHOULDER_CENTER, NUI_SKELETON_POSITION_SHOULDER_LEFT, NUI_SKELETON_POSITION_ELBOW_LEFT, NUI_SKELETON_POSITION_WRIST_LEFT, NUI_SKELETON_POSITION_HAND_LEFT); Nui_DrawSkeletonSegment(pSkel,5,NUI_SKELETON_POSITION_SHOULDER_CENTER, NUI_SKELETON_POSITION_SHOULDER_RIGHT, NUI_SKELETON_POSITION_ELBOW_RIGHT, NUI_SKELETON_POSITION_WRIST_RIGHT, NUI_SKELETON_POSITION_HAND_RIGHT); Nui_DrawSkeletonSegment(pSkel,5,NUI_SKELETON_POSITION_HIP_CENTER, NUI_SKELETON_POSITION_HIP_LEFT, NUI_SKELETON_POSITION_KNEE_LEFT, NUI_SKELETON_POSITION_ANKLE_LEFT, NUI_SKELETON_POSITION_FOOT_LEFT); Nui_DrawSkeletonSegment(pSkel,5,NUI_SKELETON_POSITION_HIP_CENTER, NUI_SKELETON_POSITION_HIP_RIGHT, NUI_SKELETON_POSITION_KNEE_RIGHT, NUI_SKELETON_POSITION_ANKLE_RIGHT, NUI_SKELETON_POSITION_FOOT_RIGHT); // Draw the joints in a different color for (i = 0; i < NUI_SKELETON_POSITION_COUNT ; i++) { if (pSkel->eSkeletonPositionTrackingState[i] != NUI_SKELETON_POSITION_NOT_TRACKED) { HPEN hJointPen; hJointPen=CreatePen(PS_SOLID,9, g_JointColorTable[i]); hOldObj=SelectObject(m_SkeletonDC,hJointPen); MoveToEx( m_SkeletonDC, m_Points[i].x, m_Points[i].y, NULL ); LineTo( m_SkeletonDC, m_Points[i].x, m_Points[i].y ); SelectObject( m_SkeletonDC, hOldObj ); DeleteObject(hJointPen); } } return; }