// adds current pose of poseModel to the saved poses list private void AddCurrentPoseToSaved(float fCurrentTime, bool isMirrored) { KinectManager kinectManager = KinectManager.Instance; if (kinectManager == null || poseModel == null || poseJoints == null) { return; } PoseModelData pose = new PoseModelData(); pose.fTime = fCurrentTime; pose.avBoneDirs = new Vector3[poseJoints.Count]; // save model rotation Quaternion poseModelRotation = poseModel.transform.rotation; if (avatarController) { ulong avatarUserId = avatarController.playerId; bool isAvatarMirrored = avatarController.mirroredMovement; Quaternion userRotation = kinectManager.GetUserOrientation(avatarUserId, !isAvatarMirrored); poseModel.transform.rotation = initialPoseRotation * userRotation; } int jointCount = kinectManager.GetJointCount(); for (int i = 0; i < poseJoints.Count; i++) { KinectInterop.JointType joint = poseJoints[i]; KinectInterop.JointType nextJoint = kinectManager.GetNextJoint(joint); if (nextJoint != joint && (int)nextJoint >= 0 && (int)nextJoint < jointCount) { Transform poseTransform1 = poseModel.GetBoneTransform(poseModel.GetBoneIndexByJoint(joint, isMirrored)); Transform poseTransform2 = poseModel.GetBoneTransform(poseModel.GetBoneIndexByJoint(nextJoint, isMirrored)); if (poseTransform1 != null && poseTransform2 != null) { pose.avBoneDirs[i] = (poseTransform2.position - poseTransform1.position).normalized; } } } // add pose to the list alSavedPoses.Add(pose); // restore model rotation poseModel.transform.rotation = poseModelRotation; }
private void getUserGestureValue() { if (manager.IsUserDetected()) { DirectionBetweenJoints = new List <Vector3>(); AngleBetweenJoints = new List <float>(); uint p1 = manager.GetPlayer1ID(); //uint jointLength = 20; UserOrientation = manager.GetUserOrientation(p1, flip); /*for (int i = 0; i < jointLength; i++) * { * JointPosition[i] = manager.GetJointPosition(p1, i); * JointLocalPosition[i] = manager.GetJointLocalPosition(p1, i); * JointOrientation[i] = manager.GetJointOrientation(p1, i, flip); * JointLocalOrientation[i] = manager.GetJointLocalOrientation(p1, i, flip); * }*/ ElbowToShoulder_L = manager.GetDirectionBetweenJoints(p1, (int)Joint.Elbow_Left, (int)Joint.Shoulder_Left, flip, flip); ElbowToShoulder_R = manager.GetDirectionBetweenJoints(p1, (int)Joint.Elbow_Right, (int)Joint.Shoulder_Right, flip, flip); ElbowToWrist_L = manager.GetDirectionBetweenJoints(p1, (int)Joint.Elbow_Left, (int)Joint.Wrist_Left, flip, flip); ElbowToWrist_R = manager.GetDirectionBetweenJoints(p1, (int)Joint.Elbow_Right, (int)Joint.Wrist_Right, flip, flip); KneeToHip_L = manager.GetDirectionBetweenJoints(p1, (int)Joint.Knee_Left, (int)Joint.Hip_Left, flip, flip); KneeToHip_R = manager.GetDirectionBetweenJoints(p1, (int)Joint.Knee_Right, (int)Joint.Hip_Right, flip, flip); KneeToAnkle_L = manager.GetDirectionBetweenJoints(p1, (int)Joint.Knee_Left, (int)Joint.Ankle_Left, flip, flip); KneeToAnkle_R = manager.GetDirectionBetweenJoints(p1, (int)Joint.Knee_Right, (int)Joint.Ankle_Right, flip, flip); DirectionBetweenJoints.Add(ElbowToShoulder_L); DirectionBetweenJoints.Add(ElbowToWrist_L); DirectionBetweenJoints.Add(ElbowToShoulder_R); DirectionBetweenJoints.Add(ElbowToWrist_R); DirectionBetweenJoints.Add(KneeToHip_L); DirectionBetweenJoints.Add(KneeToAnkle_L); DirectionBetweenJoints.Add(KneeToHip_R); DirectionBetweenJoints.Add(KneeToAnkle_R); for (int i = 0; i < DirectionBetweenJoints.Count; i++) { DirectionBetweenJoints[i].Normalize(); } for (int i = 0; i < DirectionBetweenJoints.Count; i += 2) { AngleBetweenJoints.Add(Vector3.Angle(DirectionBetweenJoints[i], DirectionBetweenJoints[i + 1])); } //Debug.Log("Get Gesture Value Complete."); } }