从文件到屏幕绘制骨骼动画

3
我基本上想做的是,使用C#和Kinect SDK将骨架帧数据(关节位置)写入文件(完成),然后在外部处理这些数据(完成),再将数据读回我的应用程序(完成),并按逐帧方式绘制数据作为轻点步行者(骨架关节),以便看到动画效果。(问题)
我的问题是:如何使用C#(及其DrawingContext类)绘制这个30fps的动画?
我想使用DrawingContext,因为我已经在记录时使用它进行SkeletonFrames的实时输出。 这里的方法类似于“Skeleton Basics”SDK示例:
this.sensor.SkeletonFrameReady += this.SensorSkeletonFrameReady;
...

private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
    {
        ...

        using (DrawingContext dc = this.drawingGroup.Open())
        {
        ...
           dc.DrawEllipse(drawBrush, null, 2Dpoint, JointThickness, JointThickness);

        }
    }

因此,Kinect使用事件以大约30fps为我提供帧,我只需绘制数据即可。
但是,如果没有Kinect而是从文件/内存中读取数据,我该如何绘制它?(目前使用2D数组[Frame,Joint])
我考虑运行一个线程以30fps的速度(使用sleep来实现帧率),然后发送类似的事件或直接绘制...但是我的尝试完全失败了。例如,我没有将事件发送到主线程进行绘制。
问题可能是我对C#的理解不足(我完全是新手)...
有什么提示可以让我如何设置并使其正常工作吗?
1个回答

5
Kinect Toolbox 已经提供了一种保存和重放流数据的方法(三种中的任何一种)。它可能填补了您需要的空缺。
如果您选择自己编写,您将希望在每个保存的骨架中保存一个从零开始的时间戳。然后,当您希望重新播放时,可以使用 DispatcherTimerTimer 从零计数到某个值--当计时器命中下一个骨架的适当时间戳值时,显示它。
正如您指出的那样,Kinect 将以约 30 帧/秒的速度运行。您不应该假设它以完整的 30 帧/秒运行。使用时间戳以便在应该播放时播放它(无论是 30 帧/秒 还是 15 帧/秒)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接