我正在使用 Kinect 在 C++ (OpenGL) 中创建一个应用程序。每当我们在 OpenGL 中单击时,调用的函数就是
void myMouseFunction( int button, int state, int mouseX, int mouseY )
{
}
但是我们可以使用 Kinect 调用它们吗?也许我们必须为此使用深度缓冲区,但如何?
我正在使用 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 的鼠标处理程序。