Kinect V2 SDK 2.0基础知识,绘制骨架的骨骼?

时间:2015-04-15 16:33:49

标签: c# wpf xaml kinect

好吧,我对Kinect很新,我已经跟踪并绘制了关节但是我不能为我的生活画每个关节之间的骨头。

我有这个代码可以绘制骨架的关节

 private void DrawBody(Body body) //takes body as argument
    {
        // Draw points
        foreach (JointType type in body.Joints.Keys)
        {
            // Draw all the body joints
            switch (type)
            {
                case JointType.Head:
                case JointType.FootLeft:
                case JointType.FootRight:
                    DrawJoint(body.Joints[type], 20, Brushes.Yellow, 2, Brushes.White);
                    break;
                case JointType.ShoulderLeft:
                case JointType.ShoulderRight:
                case JointType.HipLeft:
                case JointType.HipRight:
                     DrawJoint(body.Joints[type], 20, Brushes.YellowGreen, 2, Brushes.White);
                    break;
                case JointType.ElbowLeft:
                case JointType.ElbowRight:
                case JointType.KneeLeft:
                case JointType.KneeRight:
                    DrawJoint(body.Joints[type], 15, Brushes.LawnGreen, 2, Brushes.White);
                    break;
                case JointType.HandLeft:
                    DrawHandJoint(body.Joints[type], body.HandLeftState, 20, 2, Brushes.White);
                    break;
                case JointType.HandRight:
                    DrawHandJoint(body.Joints[type], body.HandRightState, 20, 2, Brushes.White);
                    break;
                default:
                    DrawJoint(body.Joints[type], 15, Brushes.RoyalBlue, 2, Brushes.White);
                    break;
            }                

        }         
    }

我的DrawJoint功能:

   private void DrawJoint(Joint joint, double radius, SolidColorBrush fill, double borderWidth, SolidColorBrush border)
    {
        //If Joint not tracked  then return Joint
        if (joint.TrackingState != TrackingState.Tracked) return;

        // Map the CameraPoint to ColorSpace so they match
        ColorSpacePoint colorPoint = kinectSensor.CoordinateMapper.MapCameraPointToColorSpace(joint.Position);

        // Create the UI element based on the parameters
        Ellipse El = new Ellipse();
        El.Fill = fill;
        El.Stroke = border;
        El.StrokeThickness = borderWidth;
        El.Width = 25;
        El.Height = 25;
        radius = 25;

        // Add the Ellipse to the canvas
        SkeletonCanvas.Children.Add(El);

        // Avoid exceptions based on bad tracking
        if (float.IsInfinity(colorPoint.X) || float.IsInfinity(colorPoint.X)) return;

        // Allign ellipse on canvas
        Canvas.SetLeft(El, colorPoint.X);
        Canvas.SetTop(El, colorPoint.Y);

    }

现在我陷入了困境,从这一点开始,我如何在画布上绘制每个关节之间的“骨骼”,类似于我为关节添加Eclipse的方式?

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

DrawBody(Body body)功能中,您需要设置要绘制的“骨骼”。例如:

private void DrawBody(Body body)
{
    // left forearm
    DrawBone(body.Joints[JointType.HandLeft], body.Joints[JointType.ElbowLeft]);
    // right forearm
    DrawBone(body.Joints[JointType.HandRight], body.Joints[JointType.ElbowRight]);
    // ...etc...

}

DrawBone(Joint, Joint)函数看起来像这样:

private void DrawBone(Joint first, Joint second)
{
    Line line = new Line();
    line.Stroke = Brushes.LightSteelBlue;

    line.X1 = first.Position.X;
    line.X2 = second.Position.X;
    line.Y1 = first.Position.Y;
    line.Y2 = second.Position.Y;

    line.StrokeThickness = 2;
    myCanvas.Children.Add(line);
}

我在这里从内存开始工作,所以语法可能会有所不同。