0

2D で小さなゲームを作成して、その方法を学び、プログラミング スキルを向上させようとしています。C++/C と OpenGL 3.0 と GLUT を使用してゲームをプログラムします。アニメーションとシナリオの更新に関するいくつかの重要な概念について、私はとても混乱しました。

  1. レベルの開始時にのみ、すべてのテクスチャをロードすることをお勧めします。
  2. fps レートを 40 fps に選択しました。すべてのシナリオとエージェントをすべてのフレームで再描画する必要がありますか?それとも変更のみを再描画する必要がありますか?
  3. エージェント アニメーションでは、エージェント全体をすべて再描画する必要がありますか?それとも過去から変更された部分のみを再描画する必要がありますか?
  4. シーンの一部が変更された場合 (1 つの壁または類似のものが破壊された場合)、シーン全体または変更された部分のみを再描画する必要がありますか?

現在、私の「ゲーム」は 40 fps のフレームレートで動作しますが、ゲームのちらつき効果が非常に奇妙に見えます。

4

3 に答える 3

3
  1. はい、フレームごとにテクスチャ/バッファを作成して削除するのは非常に無駄です。

  2. ほとんどの場合、シーン全体を再描画するだけの方が安価です。GPU はこれを行うために構築されており、非常に高速です。

    フレームバッファを VRAM から通常の RAM に読み込んでその差を計算すると、特に OpenGL が「オブジェクト」を追跡しないため、一度に三角形を取得してラスタライズし、それを忘れてしまうため、はるかに遅くなります。 .

  3. アニメーションの定義方法によって異なります。各フレームが個別の画像であるスプライトのようなアニメーションについて話している場合は、新しいテクスチャを参照して再描画するのが最も安価です。

    テクスチャ アトラスがある場合は、テクスチャ座標を更新して再描画します。また、シェーダーを使用している場合 (OpenGL 3.0 にしたい場合は、ほとんどの場合そうしなければなりません)、オフセットするユニフォームでうまくいくかもしれません。テクスチャコーディネート。

  4. ええ、前に言ったように、ハードウェアは画面をクリアしてすべてを再描画するように作られています。

また、フレームレートについては、モニターのリフレッシュ レートを使用して垂直ティアリングを回避する必要があります。現在、ほぼすべてのモニターが 60Hz であるため、60fps が最も一般的な「ターゲット」フレームレートです。

于 2013-02-07T22:11:34.227 に答える
1
  1. はい

2-4. はい。

2 枚の紙があるとします。最初の紙で、立っている棒人間を描いて、それを誰かに見せます。

ユーザーがその紙を見ている間に 2 枚目の紙をもう一度同じものを描きますが、今度は腕を少し動かします。

次に、2 番目の紙を見せます。2 番目の紙を見て、最初の紙をクリアし、腕をもう少し動かしている男性を描きます。

これはほとんどどのように機能するかであり、何も変更がない場合でも常にイメージ全体をレンダリングする必要がある理由です。

于 2013-02-07T22:29:55.593 に答える
1

最新のモニターのほとんどは 60 Hz レートでリフレッシュするため、30 または 60 fps を選択します。したがって、「モニター フレーム」ごとに 2 つまたは 1 つのレンダリング フレームがあります。これにより、ちらつきの影響が軽減されます。(これが「フラッシュ効果」を意味するかどうかは100%わかりません。)

他のすべての質問について (ほぼ同じように聞こえます): OpenGL レンダリングでは、すべてを再描画することは非常に一般的です。ほとんどのゲームでは、たとえば移動している場合など、フレームごとにほぼ画面全体が変化します。部分的な画面更新を行うこともできますが、「すべてを描画する」だけでなく、どの部分を描画するかを計算する必要があるため、CPU 側では非常にまれでコストがかかります。

于 2013-02-07T21:58:02.857 に答える