我正在开发一款XNA游戏。在我的游戏中,我使用Kinect的Color 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帧。
我还可以做些什么来提高色彩和深度流的性能?谢谢你的帮助。