我正在使用Kinect在C ++(OpenGL)中创建一个应用程序。每当我们点击OpenGL时,调用的函数都是
void myMouseFunction( int button, int state, int mouseX, int mouseY )
{
}
但我们可以使用Kinect调用它们吗?也许我们必须使用深度缓冲区,但是如何?
答案 0 :(得分:4)
首先:你没有“点击openGL”,因为OpenGL不处理用户输入。 OpenGL纯粹是一种渲染API。你所指的可能是与GLUT一起使用的回调; GLUT不是OpenGL的一部分,而是一个独立的框架,它也可以进行一些用户输入事件处理。
Kinect不会生成输入事件。 Kinect所做的是,它返回它“看到”的深度图像。你需要以某种方式处理这个深度图像。有像OpenNI这样的框架可以处理这个深度图像,并将其转换为手势数据或类似内容。然后,您可以处理此类手势数据并进一步处理以将其解释为用户输入。
在你的标签中你提到了“openkinect”,这是Kinect的开源驱动程序。但是OpenKinect不进行手势提取和解释,而只提供深度图像。您当然也可以对深度数据执行简单测试。例如,在某些已定义的卷的范围内测试某些对象,并将其解释为某种事件。
答案 1 :(得分:0)
我认为你对Kinect的真正含义感到困惑。 Kinect将深度和视频数据提供给您的计算机,然后必须对其进行处理。 Openkinect只为您进行非常小的处理 - 无骨架跟踪。通过骨架跟踪,您可以对每个用户关节的位置进行3D表示。
如果你只是做一些随机黑客攻击,你可以切换到KinectSDK - 但需要注意的是你只能在Windows上开发和部署。
KinectSDK也适用于OpenGL和C ++,你可以得到一个用户的“骨架”。
OpenNI - 多平台,自由自由 - 也支持骨架跟踪,但我没有使用它,所以我不推荐它。
在您进行某种骨架跟踪后,您可以专注于用户的手并处理他的动作以使“鼠标点击”工作。但这不会使用GLUT的鼠标处理程序。