6

Libgdxを使用して非常にシンプルなペイントアプリのようなものを作成しようとしています。私はこの問題を解決しようとして数日間インターチューブを検索してきましたが、これはおそらく私のopenGLの初心者によるものです。

画面にオブジェクトをペイントすると、render()メソッドが実行されている限り、ペイントしたものが非常に速く点滅します(render()メソッドが呼び出されるたびだと思います)。連続レンダリングを無効にすると、他の何かを描画するまで点滅が停止します(ここでも、render()は呼び出されません)。

新しいテクスチャをスプライトに適切にロードしていると仮定します-それは描画し、すべてを後回しにします-そして私がrender()メソッドで行っているのはこれだけです:

batch.begin();
myShape.setPosition(Gdx.input.getX(), Gdx.input.getY());
batch.setColor(Color.BLUE);
myShape.draw(batch);
batch.end();

レンダリングのたびに画面をクリアしたくないので、glClearを呼び出していません。私は、カリング、ブレンディング、ディザリングなどのためにさまざまなglEnableとglDisableを盲目的に実験しましたが、何も問題を解決していません。

いったい何が間違っているのでしょうか、それともここで理解していないのでしょうか。私は何かを正しく設定しませんでしたか?

4

1 に答える 1

3

これは、ダブルバッファリングが原因です。

ダブルバッファリングを有効にすると、前のフレームを描画するのではなく、前のフレームを描画します。つまり、偶数フレームと奇数フレームは2つの異なるバッファに描画されます。これらのバッファを変更すると、ちらつきが発生します。

私は3つの解決策を見ます:

  • ダブルバッファリングを無効にすることができます。それがlibgdxで可能かどうかはわかりません。

  • 画面をクリアして、フレームごとにすべてを描画できます。これは、描画するにつれて遅くなります。

  • 画像をテクスチャに保存し、すべてのフレームの開始時に画面に描画し直すことができます。多少の作業が必要になる場合がありますが、これが推奨されるソリューションです。この手法は「テクスチャへのレンダリング」と呼ばれます。

于 2012-05-31T22:23:02.890 に答える