0

レンダリングごとに GLUT プリミティブを描画します。物事を速くするために、毎回クリアするのではなく、新しいプリミティブを配置することにしました。それは間違っていますか?

私がこれをしたとき、私はまばたきをしました。sleep() を配置すると、1 つのフレームは問題なく、2 番目のフレームは空であることが示されました。

編集: 一度実行されるレンダリング (表示) の簡単なコード (私は Java の JOGL を使用します):

gl.glPushMatrix(); 
gl.glColor3f(1, 1, 0);
gl.glTranslatef(0, 0, 0);
glut.glutSolidCube(10);
gl.glPopMatrix();
drawable.swapBuffers();
4

3 に答える 3

1

クリアすると、フロントバッファフレームがクリアされます。次に、バックバッファフレームと呼ばれるswapBuffers()がフロントになり、その間にフロントバッファフレームにデータが描画されます。バックバッファフレーム次に、バックバッファフレームが終了すると、バッファスワップが実行されます(swapBuffers(()の呼び出しによってトリガーされます)。これがダブルバッファリングの仕組みです。フレームの色をクリアしないと、図面が蓄積されます。時間の経過とともにフロントバッファで発生しますが、望ましい結果かどうかはわかりません。すべてのレンダリングループの開始時にフロントバッファを一度クリアしても、パフォーマンスに大きな影響はありません。以前に呼び出すように、glClear()を頻繁に呼び出すと、問題が発生します。このような場合のように意味をなさない各オブジェクトの描画には、最後に描画されたオブジェクトのみが表示されます。ちらつきについては、すべてをどのように行うかをより詳しく説明する必要があります。例から、なぜそれが発生するのかは不明です。

于 2012-12-13T08:32:08.167 に答える
0

Swapbuffers(HDC)は、実際にはバッファーの内容をコピーするのではなく、フロントバッファーとバックバッファーを交換するだけです。そのため、奇数フレームはすべて表示されますが、偶数フレームは表示されません。

于 2012-12-13T08:31:32.947 に答える
0
gl.glDisable(GL_DEPTH_TEST);

?

あなたのコードをもっと見ずに言うのは難しいです。

openGL コードで予期しない結果が得られるたびに、可能な状態のリストを頭の中で調べて、それらを有効または無効に設定します。

  • 深度テスト
  • テクスチャリング
  • 点灯
  • ブレンディング
  • カリング
  • フレームバッファ
  • シェーダー
于 2012-12-13T02:17:30.857 に答える