我正在开发 XNA 游戏。在我的游戏中,我使用 KinectColor Stream
并Depth Stream
仅获取玩家的图像。为此,我检查深度像素并找到带有PlayerIndex > 0
. 然后我用方法将这些深度点映射到颜色点,MapDepthPointToColorPoint
并从彩色视频中获取这些像素的颜色。
这可以正常工作,但性能非常糟糕(尤其是在游戏中)。当我关闭颜色流并将像素设置为黑色(我的意思是带有播放器索引的像素)时,一切都很顺利。但是当我启用颜色流时它不是很有效。
我为此尝试了两件事AllFramesReady
:
1-
using (ColorImageFrame colorVideoFrame = imageFrames.OpenColorImageFrame())
{
//color logic
}
using (DepthImageFrame depthVideoFrame = imageFrames.OpenDepthImageFrame())
{
//depth logic
}
和
2-
using (ColorImageFrame colorVideoFrame = imageFrames.OpenColorImageFrame())
{
colorReceived=true;
}
if (colorReceived){
//color logic
}
using (DepthImageFrame depthVideoFrame = imageFrames.OpenDepthImageFrame())
{
depthReceived=true;
}
if (depthReceived){
//depth logic
}
第二个似乎有更好的性能,因为它在using
块之外应用颜色和深度逻辑,并尽快将资源返回给 Kinect。但是当第二个玩家出现时,性能会急剧下降。但有时当我使用第二种选择时,播放器的图像会消失 1 或 2 帧。
我还能做些什么来提高颜色和深度流的性能?谢谢你的帮助。