我正在编写一个使用 Kinect 的 C# 应用程序,我正在获取当前输出并将其写入着色器资源并将其渲染为纹理,我的问题是 Kinect(显然)仅以 30fps 运行,所以它严重限制了我的表现。
克服这个问题的最佳方法是什么,是多线程吗? 是否有某种设计模式可以帮助解决此类问题? 据我所知,我可能想让 kinect 在线程上处理数据,然后在进程完成时访问它,但我不确定从哪里开始以安全的方式开始。
感谢您提供的任何建议。
我目前将 OpenNI 用于 kinect 驱动程序/api,将 SlimDX 用于渲染的 directX 端。
最佳答案
我之前没有使用过 Kinect,你也没有指定你使用的是哪个驱动程序/包装器,但我怀疑这可能无关紧要。
您可能需要做的是:
- 将 Kinect 的“更新”周期分离到它自己的线程中。这将使您的应用程序逻辑尽可能快地自由运行,而不会因等待来自 kinect 硬件的更新而停止。
- 在 kinect 填充新数据时,您需要在每次传递时“锁定”图像/深度数据。
- 如果 Kinect 填充数据的过程花费了两倍的时间,您可以尝试缓冲图像和深度数据(如果驱动程序尚未这样做)。这意味着只在内存中保留两个副本,并在写入另一个的同时读取一个。
关于 C# 线程的优秀教程,我总是推荐 Albahari's Threading in C# .我还建议,如果您想了解有关可以采取哪些措施来加快应用程序的更多具体信息,您可能应该编辑您的问题并添加详细信息,具体说明您现在如何构建它以及您正在使用什么包装器/驱动程序等。
关于c# - 使用 Kinect 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6276828/