以3D控制光标

时间:2012-12-02 09:53:01

标签: c# 3d kinect

我正在制作3D图形编辑器,它将使用Kinect来屏幕导航 我需要制作自己的光标,通过Kinect从右手获取轴x和轴y坐标,将其转换为计算机屏幕并将光标移动到该位置。

我真正的问题是,我还需要深度传感器的坐标来获取z轴上的坐标。任何帮助将不胜感激。应用程序是在C#中使用官方MS Kinect SDK开发的。

1 个答案:

答案 0 :(得分:2)

如果右手移动光标,您可以获得右手坐标,将其转换为色坐标,然后将鼠标放在所需的坐标上。

首先,声明骨架数组和坐标映射器实例     私人骷髅[]骷髅;     private CoordinateMapper cm = new CoordinateMapper();

在AllFramesReady或SkeletonFrameready事件句柄中,您可以执行以下操作:

using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
{
 if (skeletonFrame == null)
     return;

    if (skeletons == null || skeletons.Length != skeletonFrame.SkeletonArrayLength)
    {
        skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
    }
    skeletonFrame.CopySkeletonDataTo(skeletons);

    if (skeletons.All(s => s.TrackingState == SkeletonTrackingState.NotTracked))
        return;

    Skeleton firstTrackedSkeleton = skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked).FirstOrDefault();

    CoordinateMapper cm = new CoordinateMapper(YourKinectSensor);
    ColorImagePoint colorPoint = cm.MapSkeletonPointToColorPoint(first.Joints[JointType.HandRight].Position, ColorImageFormat.RgbResolution640x480Fps30);

     //Here the variable colorPoint have the X and Y values that you need to position your cursor.
}

这是基础知识,更详细的例子我觉得你看看sdk附带的样本。