コード例 #1
0
        private void OnSkeletonUpdated(object sender, SkeletonFrameReadyEventArgs e)
        {
            // The live feed returns updates from the camera:
            var skeletonFrame = e.OpenSkeletonFrame();

            if (skeletonFrame == null)
            {
                return;
            }

            // Add smoothing to prevent glitching in the skeletons' movements:
            var raw = new Skeleton[6];

            skeletonFrame.CopySkeletonDataTo(raw);
            for (var i = 0; i < raw.Length; i++)
            {
                if (raw[i] == null)
                {
                    continue;
                }

                if (Skeletons.Count <= i || Skeletons[i] == null)
                {
                    // If this skeleton was just added then set it:
                    var newSkeleton = new CustomSkeleton();
                    newSkeleton.Set(raw[i]);
                    Skeletons.Add(newSkeleton);
                    continue;
                }

                if (Smoothing > 0f)
                {
                    // Set the state of the skeleton:
                    Skeletons[i].State = raw[i].TrackingState;

                    // Add smoothing interpolation to each point:
                    foreach (Joint joint in raw[i].Joints)
                    {
                        var pos = new Vector3();
                        pos.X = Interpolate(Skeletons[i].Joints[joint.JointType].X, joint.Position.X, Smoothing);
                        pos.Y = Interpolate(Skeletons[i].Joints[joint.JointType].Y, -joint.Position.Y, Smoothing);
                        pos.Z = Interpolate(Skeletons[i].Joints[joint.JointType].Z, joint.Position.Z, Smoothing);

                        Skeletons[i].Joints[joint.JointType] = pos;
                    }
                }
                else
                {
                    // Store the raw data for the skeleton:
                    Skeletons[i].Set(raw[i]);
                }
            }

            skeletonFrame.Dispose();

            if (raw != null && raw.Any(o => o.TrackingState == SkeletonTrackingState.Tracked))
            {
                SkeletonActive = true;
                Debug_Skeleton = "Skeleton Found";
            }
            else
            {
                SkeletonActive = false;
                Debug_Skeleton = "No Skeleton Found";
            }
        }