3

我正在构建一个应用程序(在 Qt 中),其中包含一些动态图形(意味着快速刷新到新值),并从后台线程获取值。

我想要第一张图,它的细节很重要,以一个速度(100 Hz)刷新,其他 4 个图表以较低的速度(10Hz)刷新。

问题是,当我以相同的速率(100 Hz)刷新它们时,应用程序无法处理它并且计算机卡住了,但是当刷新率不同时,第一个信号会在其上出现伪影(与例如以 10Hz 的频率运行它们)。

文物是波浪的形式(而不是直线,例如我得到一条“蛇”)。

关于它为什么有工件(我猜是渲染限制)以及可以做些什么的任何建议?

4

1 回答 1

1

即使这不能完全回答您的问题,我也会将其写为答案,因为这对于评论来说太长了。

当目标是绘制平滑的运动图形时,基本的时间单位是帧。在 60 Hz 绘制速率下,帧为 16.67 ms。绘制速率需要与监视器绘制速率相匹配。画得比显示器快是完全没有必要的。

绘制图形时,图形的移动速度必须保持恒定。如果你想知道为什么,快走 1 秒,然后慢 1 秒,快 1 秒,以此类推。这看起来并不顺利。

假设数据采样率为 60 Hz,每个样本表示为一个像素。在每一帧中,绘制所有新样本(在本例中为 1 个样本),并且图形移动一个像素。在每一帧中,移动速度是每帧一个像素。速度是恒定的,图形看起来很平滑。

但如果数据采样率为 100 Hz,则在一秒钟内,每 40 帧绘制 2 个像素,而在 20 帧中绘制 1 个像素。现在图形的移动速度不再是恒定的,它像这样变化:每帧 2,2,1,2,2,1,... 像素。那看起来很糟糕。您可能会认为帧时间是如此之小(16.67 毫秒),以至于您看不到这种微小的变化。但是看得非常清楚。甚至可以看到单个变速帧。

那么这个100Hz采样率的数据是如何平滑绘制的呢?通过保持速度恒定,在这种情况下,每帧将是 1.67 (100/60) 像素。这当然需要亚像素绘图。因此,在每一帧中,图形移动了 1.67 个像素。如果在绘制时缺少某些样本,则根本不绘制它们。在实践中,这种情况经常发生,例如 USB 数据采集卡可以提供突发的数据样本。

如果图表绘制太慢以至于无法在 60 Hz 下完成怎么办?然后下一个最佳选择是以 30 Hz 的频率绘制。然后,您为监视器绘制的每 2 个图像绘制一帧。第三个最佳选项是 20 Hz(显示器每绘制 3 个图像一帧),然后是 15 Hz(每 4 个图像一帧)等等。以 30 Hz 绘制看起来不像以 60 Hz 绘制那么流畅,但速度仍然可以保持恒定,并且看起来比以不同速度更快地绘制要好。

在您的情况下,20 Hz 的绘制速率可能会非常好。在每一帧中会有 5 个新的数据样本(如果你能以恒定的 100 Hz 获得样本)。

于 2012-10-16T20:10:54.890 回答