使用 Kinect 调用 Open Gl 的鼠标功能

invoking the mouse function of Open Gl using Kinect

本文关键字:鼠标 功能 Gl Open Kinect 调用 使用      更新时间:2023-10-16

我正在使用Kinect在C++(OpenGL)中创建一个应用程序。每当我们在 OpenGL 中单击时,调用的函数都是

void myMouseFunction( int button, int state, int mouseX, int mouseY ) 
{
}

但是我们可以使用 Kinect 调用它们吗?也许我们必须为此使用深度缓冲区,但是如何呢?

首先:你不会"点击openGL",因为OpenGL不处理用户输入。OpenGL纯粹是一个渲染API。您所指的可能是与 GLUT 一起使用的回调;GLUT不是OpenGL的一部分,而是一个独立的框架,它也做一些用户输入事件处理。

Kinect 不会生成输入事件。Kinect所做的是,它返回它"看到"的内容的深度图像。您需要以某种方式处理此深度图像。有像OpenNI这样的框架可以处理这个深度图像并将其转换为手势数据或类似数据。然后,您可以处理此类手势数据并进一步处理,以将其解释为用户输入。

在您的标签中,您提到了"openkinect",即 Kinect 的开源驱动程序。但是,OpenKinect 不会进行手势提取和解释,而只提供深度图像。当然,您也可以对深度数据执行简单的测试。例如,测试在某个定义的体积范围内存在某个对象,并将其解释为某种事件。

我认为你混淆了Kinect的真正作用。Kinect 将深度和视频数据馈送到您的计算机,然后计算机必须对其进行处理。Openkinect只为你做非常小的处理——没有骨架跟踪。骨架跟踪允许您获取用户每个关节位置的 3D 表示。

如果你只是在做一些随机的黑客攻击,你也许可以切换到KinectSDK - 但需要注意的是,你只能在Windows上开发和部署。

KinectSDK也可以与OpenGL和C++一起使用,您可以获得所述用户的"骨架"。

OpenNI - 它是多平台的,自由自由 - 也支持骨架跟踪,但我没有使用过它,所以我不能推荐它。

在你对某种骨架进行跟踪后,你可以专注于用户的手并处理他的动作,让你的"鼠标点击"工作。不过,这不会使用 GLUT 的鼠标处理程序。