【问题标题】:Different rendering speed Qt widgets不同渲染速度的 Qt 小部件
【发布时间】:2012-10-17 04:10:54
【问题描述】:

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

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

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

工件呈波浪形(而不是直线,例如我得到一条“蛇”)。

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

【问题讨论】:

  • 你是如何“刷新”他们的 - 打电话给update()?更新调用通过事件队列,多个相邻的updates() 可能会被连接起来。更重要的是,当您的显示器不太可能在 60Hz 以上绘制时,尝试以 100Hz 绘制是没有意义的,并且人类不会注意到 50Hz 以上的任何变化 - 所以我只会绘制所有其他输入值。发布您所看到的人工制品的图片。
  • 感谢 cmannet,“刷新”只是重新绘制整个内容。大约 50 赫兹,这就是我的想法,但如果我设置低于 60 赫兹,信号似乎已损坏,但也许我应该再次检查我的代码。上传它的图像有点问题,但想象一下一条直线,它有点螺旋而不是一条正确的线。
  • HelloWorld,你说的“只是重绘整个东西”是什么意思?如何触发paintEvent?
  • 我正在使用从这里获取的特殊绘图小部件:workslikeclockwork.com/index.php/components/qt-plotting-widget
  • cmannett85:您对显示器刷新率的看法是正确的。刷新比显示器快是没有用的。但 50 Hz 绝不是人类视力的极限。可以清楚地看到例如 60 Hz 和 120 Hz 之间的差异。即使它与数据速率不匹配,我也会推荐 60 Hz 刷新率。应该为监视器绘制的每一帧更新图表。有些帧将有 1 个新样本,有些帧将有 2 个样本。在每一帧中,图表应该移动 1.67 (100/60) 个样本。这样,即使新数据量因帧而异,图表看起来也很平滑。

标签: qt rendering


【解决方案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 获得样本)。

【讨论】:

    猜你喜欢
    • 2013-11-26
    • 2018-01-17
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多