13

我正在编写一个使用 Kinect 的 C# 应用程序,我正在获取当前的输出并将其写入着色器资源并将其渲染为纹理,我的问题是 Kinect(显然)仅以 30fps 运行,所以它正在节流我的表现很糟糕。

克服这个问题的最佳方法是什么,是多线程吗?是否有某种设计模式可以帮助解决此类问题?据我所知,我可能想让 kinect 处理线程上的数据,然后在进程完成时访问它,但我不确定从哪里以安全的方式开始。

感谢您提供的任何建议。

我目前将 OpenNI 用于 kinect 驱动程序/api,并将 SlimDX 用于渲染的 directX 端。

4

2 回答 2

8

我以前没有使用过 Kinect,您也没有指定您使用的驱动程序/包装器,但我怀疑这可能无关紧要。

您可能需要执行以下操作:

  1. 将 Kinect 的“更新”周期分离到它自己的线程上。这将使您的应用程序逻辑尽可能快地自由运行,而不会停止等待来自 kinect 硬件的更新。
  2. 在 kinect 填充新数据时,您需要在每次通过时“锁定”图像/深度数据。
  3. 如果 Kinect 填充数据的过程需要两长时间,如果驱动程序尚未这样做,您可以尝试缓冲图像和深度数据。这意味着只需在内存中保留两份副本,并在写入另一份时读取一份。

对于 C# 线程的优秀教程,我总是推荐Albahari 的 C# 线程。我还建议如果您想了解更多关于如何加快应用程序速度的具体信息,您可能应该编辑您的问题并添加详细信息,具体说明您现在的结构以及您正在使用的包装器/驱动程序等。

于 2011-06-13T04:10:52.180 回答
1

任何需要高性能的 Kinect 开发都应该使用池模型而不是事件模型。作为补充,您最好的选择是打开一个线程并执行池化操作。您可以使用带有事件模型的线程,以进行长时间操作而不冻结用户界面。

你可以看到这个:http: //msdn.microsoft.com/en-us/library/hh973076

于 2012-08-23T12:46:10.073 回答