7

私のOpenGLの本では、次のように書かれています。

「このようなシステムでよくあることは、フレームが複雑すぎて1/60秒で描画できないため、各フレームが複数回表示されることです。たとえば、フレームの描画に1/45秒かかる場合、次のようになります。 30 fpsで、グラフィックは1/30 1/45 =フレームあたり1/90秒、つまり3分の1の時間アイドル状態です。」

「フレームを描くのに1/45秒かかると30fpsになる」という文の中で、なぜ30 fpsしか得られないのですか?45 fpsの方が正しいのではないでしょうか?

4

3 に答える 3

12

グラフィックス カードは通常、1 フレーム先のバッファのみをバッファリングします。

フレームの描画に 1/45 秒かかる場合、1/60 秒の時点で前のフレームが再表示されます。1/45 マークで、次のフレームが完了しますが、カードには次のレンダリングを開始するための空きバッファがないため、そのフレームを送信して作業を開始できる 1/30 までアイドル状態に置かなければなりません。次のものに。

これは VSync が有効になっている場合です。これを無効にすると、30 FPS のフレームレートと 1/3 の時間でアイドル状態のカードを取得する代わりに、カードがすぐに再描画を開始し、代わりに画面のティアリングが発生します。

于 2010-01-29T00:47:14.977 に答える
5

あたりです。45 fps が得られますが、60 Hz (1 秒あたり 60 回の再描画) モニターでスムーズなフレームレートを実現するために、システムは 30 fps まで速度を落としています。

60Hz モニターでは 1/60 秒ごとに何かを描画する必要があり、「ハーフ フレーム」を描画できないため、のフレームを描画する必要があります。したがって、1 秒あたり 60 回、実際のフレームを 1 回描画し、前者を 2 フレームごとに描画すると、45fps を管理できるという事実にもかかわらず、30fps になります。

于 2010-01-29T00:44:52.503 に答える
0

はい、他の人が言ったように、これはグラフィックが次のフレームの生成を開始する前に v-sync を待っているためです。

それは言った...

すべてのモニターが 60Hz でリフレッシュされるわけではないことに注意してください。60fps 対 30fps は、70Hz ディスプレイでは 70fps 対 35fps になります。

次のフレームを開始する前にカードを v-sync まで待機させたくないが、ティアリングを回避したい場合は、トリプルバッファリングを使用します。次に、GPU は、3 番目のバッファが表示されている間、レンダリングを 2 つのバッファにピンポンします。v-sync イベントは、「現在終了している」バック バッファーへのスワップをトリガーするものです。一部のフレームが他のフレームよりも頻繁に画面に表示されることになるため、これはまだあまり良くありません。1/45 レンダリングでは、フレームは 1/30 秒間、次のフレームは 1/60 秒間残り、ぎくしゃくした動きが生じます。 .

最後に、オフスクリーン レンダリング (非表示バッファへのレンダリング) の出現により、次のフレームの初期の作業がたまたま行われなかった場合、ドライバが次のフレームで開始する前に v-sync を待たないことが理論的には可能です。表示面に触れます。あれほど頭のいいドライバーは見たことがないと思います。

于 2010-01-29T08:09:20.897 に答える