gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:01:38 27 4
gpt4 key购买 nike

我基本上想做的是使用 C# 和 Kinect SDK 将 kinect 骨架帧数据(关节位置)写入文件(完成),然后在外部处理此数据(完成),然后将数据读回我的应用程序(完成)并将数据逐帧绘制为光点步行者(骨架关节),这样我就可以看到动画。 (问题)

我的问题是:如何使用 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 为我提供了大约 4 帧的帧。 30fps 使用事件,我只绘制数据。

但是在没有kinect但数据是从文件/内存中读取的情况下如何绘制呢? (当前使用 2DArray [Frame, Joint])

我考虑过让一个线程以 30fps 的速度运行(使用 sleep 来实现帧率),然后发送一个类似的事件或直接绘制。但是我试图让这个工作完全失败。例如,我没有将事件发送到主线程进行绘图。

问题可能是我不了解 C#(我是新手)...

关于如何设置和工作的任何提示?

最佳答案

Kinect Toolbox已经提供了一种保存和重放流数据的方法(三种中的任何一种)。它可能会填补您需要的空缺。

如果您选择自己滚动,您将希望保存一个从零开始的时间戳,每个骨架都保存到文件中。然后,当您希望重放它时,您可以使用 DispatcherTimerTimer 从零计数到任何时候——当您的计时器为下一个骨架命中正确的时间戳值时,显示它。

正如您所指出的,Kinect 将为您提供大约 30 fps。您不想假设它以完整的 30 fps 运行。使用时间戳以便在应该播放时播放它(无论是 30 fps 还是 15 fps)

关于c# - 从文件到屏幕绘制骨骼动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13940341/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com