예제 #1
0
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();
	}
}
예제 #2
0
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();
    }
}