[解決済み] freeglutにおけるglutidlefunc()の意味するところ
質問
glutdisplayfunc()がどのように表示をループさせるか、Ivはいくつかの場所で表示ではなくglutidleにゲームの仕組みを置くべきだと読みました; なぜそれらをwhile (gameisrunning) ループに置くことができないのですか?
どのように解決するのですか?
インタラクティブなOpenGLアプリケーションにあるようなイベント駆動型プログラミングでは、一般的にメインアプリケーションのループは3つのことを行います。
- 現在のイベントキューをチェックし、前回のチェック以降に発生したイベント(マウスの動き、キー操作など)を処理します。
- アプリケーションの状態(プレイヤーやオブジェクトの位置、ゲーム物理など)を更新します。- 次のレンダリングフレームの準備のため
- 現在のフレームをレンダリングします。
GLUTはこれらのステップを暗黙のうちに
glutMainLoop()
を使用します。 あなたが登録するGLUTコールバックのほとんどすべて(例えば。
glutKeyboardFunc()
,
glutReshapeFunc()
など)が1.を担当し、2.はおそらく設定した関数を呼び出します。
ここで、アイドル関数を
glutIdleFunc()
の場合、現在のイベントがすべて処理された後に呼び出されます。 多くの場合、プログラマはシーンのレンダリングに使用するルーチン(つまり、Idle関数に渡すルーチン)を単に呼び出すためにIdle関数を実装します。
glutDisplayFunc()
). この方法は、レンダリングにしばらく時間がかかる場合(たとえば、1 フレームのレンダリングにほぼすべての時間がかかる場合)、レンダリングを完了してから次のフレームのイベントを処理する時間がない可能性があるため、問題になることがあります。 もし、あなたが言及したwhileループを挿入するとしたら、まさにこれを行うことになり、GLUTのネイティブなイベント処理機構を回避することになります。 GLUTとうまく付き合うには、アイドル関数を実装して
glutPostRedisplay()
これは、すべてのイベントが処理された後、アイドル関数が呼び出される前に、表示関数の呼び出しをスケジュールするようにGLUTに指示します。
関連
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み] C++で仮想関数が必要な理由とは?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】Enterキーを押して続行する
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された