-1

オブジェクトにいくつかのオブジェクト、ライト、テクスチャを描画するopenglコードを記述します。矢印などの特別なキーは、テクスチャマッピングされたオブジェクトを回転させます。しかし、それらを約10秒間回転させ続けると、openglウィンドウを閉じることさえできません。私は自分のコードを投稿していません、それは少し長く、それのどの部分がそれを遅くするのか分かりません。

4

1 に答える 1

1

コメントセクションでのあなたの回答に基づいて、私は何が起こっているのかを理解していると思います。

glutSpecialFuncは私の矢印ハンドラー関数を呼び出します。矢印ハンドラーの場合:if(GLUT_KEY_UP){// glutPostRedisplay();}を回転しますif(GLUT_KEY_DOWN ....)......など

これは、過剰なプログラムでキーボードイベントを処理する正しい方法ではありません。実際には、ユーザーがキーを押した回数に基づいて、レンダリングループで実行される作業量が変化します。

キーストロークに応答して再表示を投稿する代わりに、キーボードのアクティビティに関係なくシーンを再描画し続けるメインの描画ループが必要です。また、位置(x、y、z)の状態変数、およびルックアット回転の角度も必要になります。描画ルーチンは、これらの状態変数のx、y、z、および回転情報を使用してシーンを単純に描画します。

次に、キーボード処理では、プログラムでサポートするキーストロークに応じて、これらの状態変数を適切に変更するだけです。メインの描画ループは、キーボードハンドラーと非同期で自由に実行されるため、これらの変更に自動的に応答します。

于 2012-12-30T21:19:36.203 に答える