不同的渲染速度Qt小部件

时间:2012-10-11 13:41:25

标签: qt rendering

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

我想要第一张图,其细节在一个速度(100赫兹)下刷新很重要,另外四个图表以低速(10赫兹)刷新。

问题是,当我以相同的速率(100赫兹)刷新它们时,应用程序无法处理它并且计算机卡住了,但是当刷新率不同时,第一个信号就会产生伪影(比较例如运行它们都是10Hz)。

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

有关它为何具有工件(我猜测的渲染限制)以及可以采取哪些措施的任何建议?

1 个答案:

答案 0 :(得分:1)

我写这个作为答案,即使这不能完全回答你的问题,因为评论太长了。

当目标是绘制平滑的移动图形时,基本时间单位是帧。在60 Hz绘图速率下,帧为16.67 ms。绘图速率需要与显示器绘图速率相匹配。完全不需要比显示器绘图更快。

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

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

但是如果数据采样率是100Hz,则在40帧中的一秒内绘制2个像素,在20帧中绘制1个像素。现在图形移动速度不再是常数,它变化如下:每帧2,2,1,2,2,1,...像素。那看起来很糟糕。您可能认为帧时间太小(16.67 ms),您无法看到这种小变化。但是很清楚地看到了。甚至可以看到单个变速帧。

那么如何平滑地绘制100 Hz采样率的数据?通过保持速度恒定,在这种情况下,每帧将是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的恒定速率获得样本)。