0

QGLWidget を再描画して FPS を決定する 2 つのタイマーがあります。

QObject::connect(&fpsTimer, SIGNAL(timeout()), this, SLOT(updateFps()));
fpsTimer.start(1000);

QObject::connect(&updateTimer, SIGNAL(timeout()), this, SLOT(updatePanel()));
updateTimer.start(0);


void GLPanel::updatePanel()
{
    updateBuffers();
    updateGL();
    frameCount++;
}

また、フレームごとに新しいデータで vbo を更新します。

Qt がインストールされているマシンでは、更新タイマーが GUI スレッドに基づいて起動するため、一貫して 60 FPS が得られます。GUIスレッドに依存するのではなく、15msごとに更新するように設定してみました。他のマシンでは、約 1000 FPS まで上昇します。

私が抱えているもう 1 つの問題は、私のポイントが他のマシンで正しく描画されないことです。それらは間違った場所と色で描かれています。これがQtまたはOpenGLに関連しているかどうかについて...?

これを引き起こす原因についてのアイデアはありますか?

画面中央をクリックした後の他の マシン 他のマシン

ポイントをクリックした後の稼働中の開発マシン 稼働中の開発マシン

どちらもまったく同じに見えるはずです。

4

1 に答える 1

1

描画タイマーは 0 ミリ秒の間隔を使用しています。そのため、プログラムはできるだけ速く描画しようとします。そのため、他のコンピューターのフレーム レートは非常に高くなっています。お使いのコンピューターは、おそらくディスプレイ ドライバーのvsync設定を使用しています。Vsync は、描画をモニターのリフレッシュ レートに同期します。そのため、フレームレートは 60 Hz です。そのため、vsync 設定を使用して、他のコンピューターのフレーム レートを 60 に制限できます。

ただし、古くて安価なディスプレイ カードの中には、vsync をまったくサポートしていないものもあります。次に、タイマーの間隔を 15 ミリ秒などに変更する必要があります。vsync ほど良い結果は得られませんが、1000 Hz で描画するよりははるかに優れています。

于 2013-02-22T21:47:39.780 に答える