3

動的な(新しい値にすばやく更新されることを意味する)いくつかのグラフを含み、バックグラウンドスレッドから値を取得するアプリ(Qt)を構築しています。

1つの速度(100 Hz)で更新することが重要な最初のグラフと、低速(10Hz)で更新する他の4つのグラフが必要です。

問題は、すべてを同じレート(100 Hz)でリフレッシュすると、アプリがそれを処理できず、コンピューターがスタックすることですが、リフレッシュレートが異なると、最初の信号にアーティファクトが発生します(それらをすべて10Hzで実行する例)。

アーティファクトは波の形をしています(たとえば、直線ではなく、「ヘビ」が表示されます)。

アーティファクト(レンダリング制限)がある理由と、それに対して何ができるかについての提案はありますか?

4

1 に答える 1

1

コメントするには長すぎるため、これがあなたの質問に完全に答えていなくても、これを回答として書いています。

滑らかに動くグラフィックスを描くことが目的の場合、時間の基本単位はフレームです。60 Hz の描画レートでは、フレームは 16.67 ミリ秒です。描画速度はモニターの描画速度と一致させる必要があります。モニターより速く描画する必要はまったくありません。

グラフを描くときは、グラフの移動速度を一定に保つ必要があります。なぜだろうと思ったら、1 秒速く歩き、次に 1 秒遅く、1 秒速く歩きます。それは滑らかに見えません。

データのサンプル レートが 60 Hz で、各サンプルが 1 つのピクセルとして表されるとします。各フレームで、すべての新しいサンプル (この場合は 1 つのサンプル) が描画され、グラフは 1 ピクセル移動します。移動速度は、各フレームで 1 フレームあたり 1 ピクセルです。速度は一定で、グラフは非常に滑らかに見えます。

ただし、データのサンプル レートが 100 Hz の場合、1 秒間に 40 フレームで 2 ピクセルが描画され、20 フレームで 1 ピクセルが描画されます。グラフの移動速度はもはや一定ではなく、次のように変化します: フレームあたり 2,2,1,2,2,1... ピクセル。それは悪いですね。フレーム時間が非常に短い (16.67 ミリ秒) ため、この種の小さな変化は見られないと思うかもしれません。しかし、それは非常にはっきりと見られます。単一の可変速度フレームでさえ見ることができます。

では、この 100 Hz のサンプル レートのデータはどのようにスムーズに描画されるのでしょうか。速度を一定に保つと、この場合、フレームあたり 1.67 (100/60) ピクセルになります。もちろん、それにはサブピクセル描画が必要です。したがって、すべてのフレームで、グラフは 1.67 ピクセルずつ移動します。描画時に一部のサンプルが欠落している場合、それらは単に描画されません。実際には、これは非常に頻繁に発生します。たとえば、USB データ取得カードはデータ サンプルをバーストで提供できます。

グラフの描画が遅すぎて 60 Hz で実行できない場合はどうなりますか? 次に最適なオプションは、30 Hz で描画することです。次に、モニターが描画する2つの画像ごとに1つのフレームを描画しています。3 番目に最適なオプションは 20 Hz (モニターが描画する 3 つの画像ごとに 1 フレーム)、次に 15 Hz (4 つの画像ごとに 1 フレーム) などです。30 Hz での描画は、60 Hz での描画ほどスムーズには見えませんが、速度を一定に保つことができ、速度を変えて高速に描画するよりも見栄えがよくなります。

あなたの場合、20Hzの描画レートはおそらくかなり良いでしょう。各フレームには、5 つの新しいデータ サンプルがあります (一定の 100 Hz でサンプルを取得できる場合)。

于 2012-10-16T20:10:54.890 に答える