XV3 UserDetector::getUpVector() { XuUserID userID = getTrackedUserID(); if (userID) { XV3 v0(getSkeletonJointPosition(XU_SKEL_TORSO)); XV3 v1(getSkeletonJointPosition(XU_SKEL_NECK)); return (v1 - v0).normalize(); } else { return XV3(); } }
XV3 UserDetector::getForwardVector() { XuUserID userID = getTrackedUserID(); if (userID) { XV3 v0(getSkeletonJointPosition(XU_SKEL_RIGHT_SHOULDER)); XV3 v1(getSkeletonJointPosition(XU_SKEL_TORSO)); XV3 v2(getSkeletonJointPosition(XU_SKEL_LEFT_SHOULDER)); return ((v1 - v0).cross(v2 - v1)).normalize(); } else { return XV3(); } }
//----------------------------------------------------------------------------------------------------- // //----------------------------------------------------------------------------------------------------- XV3 UserDetector::getUpVector() { if (kn_playerStatus->isPlayerVisible()) { XnUserID userID = getPlayerID(); XnSkeletonJointPosition p0, p1; kn_userGen->GetSkeletonCap().GetSkeletonJointPosition(userID, XN_SKEL_TORSO, p0); kn_userGen->GetSkeletonCap().GetSkeletonJointPosition(userID, XN_SKEL_NECK, p1); XV3 v0(p0.position), v1(p1.position); return (v1 - v0).normalize(); } else { return XV3(); } }
//----------------------------------------------------------------------------------------------------- // //----------------------------------------------------------------------------------------------------- XV3 UserDetector::getForwardVector() { if (kn_playerStatus->isPlayerVisible()) { // OpenNI's orientation does not work very well. /* XnSkeletonJointTransformation t; m_userGen->GetSkeletonCap().GetSkeletonJoint(userID, XN_SKEL_TORSO, t); float* e = t.orientation.orientation.elements; return XV3(e[6], e[7], -e[8]); */ XnUserID userID = getPlayerID(); XnSkeletonJointPosition p0, p1, p2; kn_userGen->GetSkeletonCap().GetSkeletonJointPosition(userID, XN_SKEL_RIGHT_SHOULDER, p0); kn_userGen->GetSkeletonCap().GetSkeletonJointPosition(userID, XN_SKEL_TORSO, p1); kn_userGen->GetSkeletonCap().GetSkeletonJointPosition(userID, XN_SKEL_LEFT_SHOULDER, p2); XV3 v0(p0.position), v1(p1.position), v2(p2.position); return ((v1 - v0).cross(v2 - v1)).normalize(); } else { return XV3(); } }