#include "stdafx.h" #include "SLJoints.h" #include "NiToolWin.h" // SL/OpenSim Joints static std::string _SLJointName[] = // SL_MAX_JOINT_NUM { "mPelvis", "mTorso", "mChest", "mNeck", "mHead", "mCollarLeft", "mShoulderLeft", "mElbowLeft", "mWristLeft", "L_Hand", "mCollarRight", "mShoulderRight", "mElbowRight", "mWristRight", "R_Hand", "mHipLeft", "mKneeLeft", "mAnkleLeft", "mFootLeft", "mToeLeft", "mHipRight", "mKneeRight", "mAnkleRight", "mFootRight", "mToeRight" }; std::string SLJointName(int n) { std::string str = ""; if (n>=0 && n none 1: XN_SKEL_HEAD ○ × => [mHead(4)] 2: XN_SKEL_NECK ○ ○ => mNeck(3) 1 3: XN_SKEL_TORSO ○ ○ => mTrso(1) | 4: XN_SKEL_WAIST × × => none 15 - 13 - 12 - 2 - 6 - 7 - 9 5: XN_SKEL_LEFT_COLLAR × × => none | 6: XN_SKEL_LEFT_SHOULDER ○ ○ => mShoulderRight(11) 3 7: XN_SKEL_LEFT_ELBOW ○ ○ => mElbowRight(12) 21 17 8: XN_SKEL_LEFT_WRIST × × => none | | 9: XN_SKEL_LEFT_HAND ○ × => [mWristRight(13)] 22 18 10: XN_SKEL_LEFT_FINGERTIP × × => none | | 11: XN_SKEL_RIGHT_COLLAR × × => none 24 20 12: XN_SKEL_RIGHT_SHOULDER ○ ○ => mShoulderLeft(6) 13: XN_SKEL_RIGHT_ELBOW ○ ○ => mElbowLeft(7) 14: XN_SKEL_RIGHT_WRIST × × => none 15: XN_SKEL_RIGHT_HAND ○ × => [mWristLeft(8)] 16: XN_SKEL_RIGHT_FINGERTIP × × => none 17: XN_SKEL_LEFT_HIP ○ ○ => mHipRight(20) 18: XN_SKEL_LEFT_KNEE ○ ○ => mKneeRight(21) 19: XN_SKEL_LEFT_ANKLE × × => none 20: XN_SKEL_LEFT_FOOT ○ × => [mAnkleLeft(23)] 21: XN_SKEL_RIGHT_HIP ○ ○ => mHipLeft(15) 22: XN_SKEL_RIGHT_KNEE ○ ○ => mKneeLeft(16) 23: XN_SKEL_RIGHT_ANKLE × × => none 24: XN_SKEL_RIGHT_FOOT ○ × => [mAnkleLeft(17)] */ static int _OpenNI2SLRotJoint[] = // OPENNI_MAX_JOINT_NUM { 0, -1, 3, 1, -1, -1, 11, 12, -1, -1, -1, -1, 6, 7, -1, -1, -1, 20, 21, -1, -1, 15, 16, -1, -1 }; static int _OpenNI2SLPosJoint[] = // OPENNI_MAX_JOINT_NUM { 0, 4, 3, 1, -1, -1, 11, 12, -1, 13, -1, -1, 6, 7, -1, 8, -1, 20, 21, -1, 23, 15, 16, -1, 17 }; int OpenNI2SLRotJointNum(int n) { return _OpenNI2SLRotJoint[n]; } int OpenNI2SLPosJointNum(int n) { return _OpenNI2SLPosJoint[n]; } //////////////////////////////////////////////////////////////////////////////////////// // // Kinect SDK // /* 0: NUI_SKELETON_POSITION_HIP_CENTER => mPelvis(0) 1: NUI_SKELETON_POSITION_SPINE => mTorso(1) 2: NUI_SKELETON_POSITION_SHOULDER_CENTER => mNeck(3) 3: NUI_SKELETON_POSITION_HEAD => [mHead(4)] 3 4: NUI_SKELETON_POSITION_SHOULDER_LEFT => mShoulderRight(11) | 5: NUI_SKELETON_POSITION_ELBOW_LEFT => mElbowRight(12) 11 - 10 - 9 - 8 - 2 - 4 - 5 - 6 - 7 6: NUI_SKELETON_POSITION_WRIST_LEFT => mWristRight(13) | 7: NUI_SKELETON_POSITION_HAND_LEFT => [R_Hand(14)] 1 8: NUI_SKELETON_POSITION_SHOULDER_RIGHT => mShoulderLeft(6) | 9: NUI_SKELETON_POSITION_ELBOW_RIGHT => mElbowLeft(7) 16 0 12 10: NUI_SKELETON_POSITION_WRIST_RIGHT => mWristLeft(8) | | 11: NUI_SKELETON_POSITION_HAND_RIGHT => [L_Hand(9)] 17 13 12: NUI_SKELETON_POSITION_HIP_LEFT => mHipRight(20) | | 13: NUI_SKELETON_POSITION_KNEE_LEFT => mKneeRight(21) 18 14 14: NUI_SKELETON_POSITION_ANKLE_LEFT => mAnkleRight(22) | | 15: NUI_SKELETON_POSITION_FOOT_LEFT => [mFootRight(23)] 19 15 16: NUI_SKELETON_POSITION_HIP_RIGHT => mHipLeft(15) 17: NUI_SKELETON_POSITION_KNEE_RIGHT => mKneeLeft(16) 18: NUI_SKELETON_POSITION_ANKLE_RIGHT => mAnkleLeft(17) 19: NUI_SKELETON_POSITION_FOOT_RIGHT => [mFootLeft(18)] */ static int _Kinect2SLRotJoint[] = // KINECT_MAX_JOINT_NUM { 0, 1, 3, -1, 11, 12, 13, -1, 6, 7, 8, -1, 20, 21, 22, -1, 15, 16, 17, -1 }; static int _Kinect2SLPosJoint[] = // KINECT_MAX_JOINT_NUM { 0, 1, 3, 4, 11, 12, 13, 14, 6, 7, 8, 9, 20, 21, 22, 23, 15, 16, 17, 18 }; int Kinect2SLRotJointNum(int n) { return _Kinect2SLRotJoint[n]; } int Kinect2SLPosJointNum(int n) { return _Kinect2SLPosJoint[n]; } /* int NI_PELVIS = 0; int NI_TORSO = 1; int NI_NECK = 2; int NI_HEAD = 3; int NI_L_SHLDR = 4; int NI_L_ELBOW = 5; int NI_L_WRIST = 6; int NI_L_HAND = 7; int NI_R_SHLDR = 8; int NI_R_ELBOW = 9; int NI_R_WRIST = 10; int NI_R_HAND = 11; int NI_L_HIP = 12; int NI_L_KNEE = 13; int NI_L_ANKLE = 14; int NI_L_FOOT = 15; int NI_R_HIP = 16; int NI_R_KNEE = 17; int NI_R_ANKLE = 18; int NI_R_FOOT = 19; */ static int _Ni2SLRotJoint[] = // NI_JOINT_NUM { 0, 1, 3, -1, 11, 12, 13, -1, 6, 7, 8, -1, 20, 21, 22, -1, 15, 16, 17, -1 }; static int _Ni2SLPosJoint[] = // NI_JOINT_NUM { 0, 1, 3, 4, 11, 12, 13, 14, 6, 7, 8, 9, 20, 21, 22, 23, 15, 16, 17, 18 }; int Ni2SLRotJointNum(int n) { return _Ni2SLRotJoint[n]; } int Ni2SLPosJointNum(int n) { return _Ni2SLRotJoint[n]; } //////////////////////////////////////////////////////////////////////////////////////// // // Wrapper // // // Library 固有のジョイント番号から SL/OSの座標用ジョイント番号を得る // int NiSDK2SLPosJointNum(int n, NiSDK_Lib lib) { if (lib==NiSDK_OpenNI) { return _OpenNI2SLPosJoint[n]; } else if (lib==NiSDK_Kinect) { return _Kinect2SLPosJoint[n]; } return -1; } // // Library 固有のジョイント番号から SL/OSの回転用ジョイント番号を得る // int NiSDK2SLRotJointNum(int n, NiSDK_Lib lib) { if (lib==NiSDK_OpenNI) { return _OpenNI2SLRotJoint[n]; } else if (lib==NiSDK_Kinect) { return _Kinect2SLRotJoint[n]; } return -1; } // // Library 固有のジョイント番号から SL/OSの座標用ジョイント名を得る // std::string NiSDK2SLPosJointName(int n, NiSDK_Lib lib) { std::string str = ""; int j = -1; if (lib==NiSDK_OpenNI) { j = _OpenNI2SLPosJoint[n]; } else if (lib==NiSDK_Kinect) { j = _Kinect2SLPosJoint[n]; } if (j>=0) str = _SLJointName[j]; return str; } // // Library 固有のジョイント番号から SL/OSの回転用ジョイント名を得る // std::string NiSDK2SLRotJointName(int n, NiSDK_Lib lib) { std::string str = ""; int j = -1; if (lib==NiSDK_OpenNI) { j = _OpenNI2SLRotJoint[n]; } else if (lib==NiSDK_Kinect) { j = _Kinect2SLRotJoint[n]; } if (j>=0) str = _SLJointName[j]; return str; } // // 共通ジョイント番号から SL/OSの座標用ジョイント名を得る // std::string Ni2SLPosJointName(int n) { std::string str = ""; int j = _Ni2SLPosJoint[n]; if (j>=0) str = _SLJointName[j]; return str; } // // 共通ジョイント番号から SL/OSの回転用ジョイント名を得る // std::string Ni2SLRotJointName(int n) { std::string str = ""; int j = _Ni2SLRotJoint[n]; if (j>=0) str = _SLJointName[j]; return str; }