【问题标题】:How do I translate the SkeletonPoint's Value using Kinect SDK before mapping them to the colorImage?如何在将 SkeletonPoint 的值映射到 colorImage 之前使用 Kinect SDK 转换它们?
【发布时间】:2013-05-21 17:41:28
【问题描述】:

我正在 Kinect 上创建一个项目,我需要在其中平移和旋转用户的骨架,使其始终面向 Kinect。

我知道我无法更改 Skeleton 的实际值,所以我创建了一个名为 littleGuy 的头像骨架。 littleGuy 是一个 SkeletonPoints 数组,将实际 Skeleton 的所有 SkeletonPoints 分别分配给每个元素。

所有操作都发生在 littleGuy 骨架上,然后保存在另一个名为 transGuy(翻译的家伙)的骨架中。问题是每当我编辑 transGuy 的值,然后尝试将它们映射到 colorImage 时,我都会得到值溢出并且永远不会渲染骨架。

在下面的代码中,我将 Center Hip 分配给 littleGuy[0],然后我选择偏移量为 -CHip,因为所有翻译都将基于此 centerHip。然后我将偏移量添加到 transGuy。

if (joint.JointType == JointType.HipCenter)
                {
                    littleguy_chip = skeleton.Joints[JointType.HipCenter].Position;
                    littleGuy[0] = littleguy_chip;

                    TransValue.X = -littleguy_chip.X;
                    TransValue.Y = -littleguy_chip.Y;
                    TransValue.Z = -littleguy_chip.Z;

                    transGuy[0] = littleGuy[0];
                    transGuy[0].X = littleGuy[0].X + TransValue.X;
                    transGuy[0].Y = littleGuy[0].Y + TransValue.Y;
                    transGuy[0].Z = littleGuy[0].Z + TransValue.Z;

                    prevPositions[0] = joint.Position;
                }

之后,我通过在 transGuy 上循环并将值映射到骨架来绘制每个关节,但我总是得到值 2147483648

 for (int j = 0; j < transGuy.Length; j++)
                {
                    if ((transGuy[i] == littleguy_head && transGuy[j] == littleguy_cshoulder)
                        || (transGuy[i] == littleguy_cshoulder && transGuy[j] == littleguy_spine)
                        || (transGuy[i] == littleguy_spine && transGuy[j] == littleguy_chip))
                    {
                        var p2 = kinect.CoordinateMapper.MapSkeletonPointToColorPoint(
                            transGuy[j], ColorImageFormat.RgbResolution640x480Fps30);

                        spriteBatch.Draw(lineTex, new Vector2(p.X + 80, p.Y),
                            null, Color.White, (float)Math.Atan2(p2.Y - p.Y, (p2.X + 80) - (p.X + 80)), new Vector2(0f, (float)lineTex.Height / 2),
                            new Vector2(Vector2.Distance(new Vector2(p.X + 80, p.Y), new Vector2(p2.X + 80, p2.Y)), 1f), SpriteEffects.None, 0f);

                    }

我真的需要在将这些点映射到彩色图像之前对其进行操作......我该怎么办?

【问题讨论】:

    标签: c# xna kinect xna-4.0 kinect-sdk


    【解决方案1】:

    我解决了这个问题。由于 SkeletonPoint 中 X、Y、Z 的值是浮点数。在添加偏移量时键入 Cast to decimal,然后键入将整个内容转换回浮点数。新代码如下所示:

    if (joint.JointType == JointType.Spine)
                    {
                        littleguy_spine = skeleton.Joints[JointType.Spine].Position;
                        littleGuy[1] = littleguy_spine;
    
                        transGuy[1] = littleGuy[1];
                        transGuy[1].X = (float)((decimal)(littleGuy[1].X) + (decimal)(TransValue.X));
                        transGuy[1].Y = (float)((decimal)(littleGuy[1].Y) + (decimal)(TransValue.Y));
                        transGuy[1].Z = (float)((decimal)(littleGuy[1].Z) + (decimal)(TransValue.Z));
    
                        prevPositions[1] = joint.Position;
                    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-05
      相关资源
      最近更新 更多