当前位置: 首页 > 知识库问答 >
问题:

Kinect V2 SDK 2.0基础知识,画骨骼的骨骼?

赵浩邈
2023-03-14
 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;
            }                

        }         
    }
   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);

    }

现在我被卡住了,从这一点开始,我该如何在画布上画出身体每个关节之间的‘骨头',类似于我如何为关节添加日食?。

如有任何帮助,不胜感激

共有1个答案

艾昊明
2023-03-14

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);
}

我在内存中工作,所以语法可能会有点问题。

 类似资料:
  • 骨骼动画类 父类BK.Node 手机QQ版本 成员变量 变量 类型 名称 备注 canMixVertexColor boolean 是否启用颜色叠加 timeScale number 播放速率 paused boolean 暂停 accessoryTypes Array 装扮类型数组 手机QQ版本 7.2.5 例子: var rice =new BK.SkeletonAnimation(atlas

  • 骨骼动画是一种常见但类型特殊的动画,我们提供两套系统,针对不同方向的需求,分别优化。 这两套系统的唯一开关就是 SkeletalAnimation 上的 useBakedAnimation 开关, 启用对应预烘焙骨骼动画系统,禁用后对应实时计算骨骼动画系统,运行时也可以无缝切换。 预烘焙骨骼动画系统 这个系统的压倒性目的是性能,部分表现力的牺牲也被认为是可以接受的。 我们针对性地做了很多底层优化,

  • 所谓骨骼动画,以人体为例简单地说,人体的骨骼运动,骨骼运动会带动肌肉和人体皮肤的空间移动和表面变化,下面将会提到的蒙皮概念你可以类比人体的皮肤。 Threejs骨骼动画需要通过骨骼网格模型类SkinnedMesh来实现,一般来说骨骼动画模型都是3D美术创建,然后程序员通过threejs引擎加载解析,为了让大家更深入理解骨骼动画,下面就通过threejs程序编写一个简易的骨骼动画。 相关类 直接使用

  • 骨骼动画类 父类BK.Node 手机QQ版本 成员变量 变量 类型 名称 备注 canMixVertexColor boolean 是否启用颜色叠加 timeScale number 播放速率 paused boolean 暂停 accessoryTypes Array 装扮类型数组 手机QQ版本 7.2.5 例子: var rice =new BK.SkeletonAnimation(atlas

  • 骨骼是Skeleton(骨架)的一部分。骨架是由SkinnedMesh(蒙皮网格)依次来使用的。 骨骼几乎和空白Object3D相同。 代码示例 const root = new THREE.Bone(); const child = new THREE.Bone(); root.add( child ); child.position.y = 5; 构造器 Bone( ) 创建一个新的Bone.

  • 骨骼动画和变形动画是非常常见的动画形式,对于Threejs三维引擎来说自然要支持。一般开发过程中都是加载3D美术绘制好的骨骼动画模型或者变形动画模型,不过为了大家更深入的理解这两种动画模型,课程12.1和12.3节用纯Threejs代码实现相应的动画模型创建,虽然怎增加了学习的难度,但是非常有助于从底层理解这两种动画模型。 这两种动画模型也是在上一章讲到的帧动画基础之上实现,学习本章之前最好先学习

  • DragonBones 骨骼动画资源是由 DragonBones 编辑器导出的数据格式(支持 DragonBones v5.6.2 及以下)。 导入 DragonBones 骨骼动画资源 DragonBones 骨骼动画资源包括: .json/.dbbin 骨骼数据 .json 图集数据 .png 图集纹理 创建骨骼动画资源 在场景中使用 DragonBones 骨骼动画资源需要两个步骤: 创建节

  • 骨骼动画资源是由 Spine 所导出的数据格式(Creator v2.0.7 及以下支持 Spine v2.5,Creator v2.0.8~v2.1 支持 Spine v3.6,Creator v2.2 支持 Spine v3.7,Creator v2.3 及以上支持 Spine v3.8)。 导入骨骼动画资源 骨骼动画所需资源有: .json/.skel 骨骼数据 .png 图集纹理 .txt