2

C++ で 3D-Stereo OpenGL プログラムを作成しました。timeBeginPeriod(1) の後に timeGetTime を使用して、ディスプレイ内のオブジェクトの位置を追跡します。「Start Debugging」でプログラムを実行すると、オブジェクトがディスプレイ上でスムーズに移動します (本来あるべき姿)。「デバッグなしで開始」でプログラムを実行すると、オブジェクトが時々フリーズし、画面が何度か更新されてから、新しい位置にジャンプします。この問題の原因とその修正方法に関するアイデアはありますか?

編集:マウスボタンをクリックすると、「デバッグなしで開始」を実行すると、少し遅れてジャーキネスが解決されるようです。私のアプリケーションはコンソール アプリケーションです (プログラムの最初の起動時にいくつかのパラメーターを取り込みます)。これら 2 つのオプションのウィンドウ フォーカスに違いがあるのでしょうか? コンソール ウィンドウからの入力が完了したときに、フォーカスを OpenGL ウィンドウ (glutFullScreen(); を介して全画面表示) に強制する明示的な方法はありますか?

ありがとう。

4

2 に答える 2

1

APIのtimeGetTime精度は 10 ミリ秒程度しかありません。測定している間隔が 50 ミリ秒程度未満の場合は、システム タイマーで予想される変動の影響が見られるだけかもしれません。デバッガがこれに影響を与える理由はわかりませんが、システム全体の仕組みはブラック ボックスです。QueryPerformanceCounterを使用して、より高解像度のタイミングを取得できます。これは役立つ場合があります。

于 2009-11-25T19:23:18.333 に答える
0

デバッグ中とデバッグ中でないときにプログラムの動作が異なる最も一般的な原因は、初期化されていない変数の使用、特に初期化されていないメモリの読み取りです。あなたがそれをしていないことを確認してください。

より OpenGL 固有のもの - コマンドのフラッシュで問題が発生する可能性があります。glFinish()毎コマ描いてから挿入してみてください。
また、フリーズが発生したときに、アプリケーション全体がフリーズしているのではなく、実際にフレームがレンダリングされていることを何らかの方法で確認することも役立つ場合があります。OpenGLがその仕事をしているように見えるので、ロジックにバグがある可能性が高い場合。

于 2009-11-25T19:12:33.030 に答える