2

が何に使われているかよくわかりませんglutPostRedisplay()。関数でそれを呼び出すと、次のフレームdisplay()関数が呼び出されるようです。ただし、その機能がアニメーションにどのように関係しているかはわかりません。物理演算用の関数を関数として登録し、Idleそこで何らかの計算を行うことがよくあります。ただし、回転、アニメーションを持つオブジェクトの位置などのパラメーターを変更すると、それを呼び出さなくてもglutPostRedisplay()display()関数自体がシーンを再描画します。なぜ電話する必要があるのglutPostRedisplay()ですか?

2 番目の質問は についてglutIdleFunc()です。私の質問は、CPU が非常にビジーで、各フレームでアイドル時間がない可能性はありますか?

4

1 に答える 1

3

GLUT のメイン ループを示す疑似コードを次に示します。

redisplay = True

glutMainLoop:

    ...

    forever:
        switch(eventsPoll):
            case KEYBOARD:
                if(eventKey):
                    call_keyboardFunction
            case MOUSE:
                if(eventMouseMove):
                    if(mousebutton_pressed):
                        call_mouseMotionFunc
                    else:
                        call_passiveMotionFunc
                if(eventMouseButton):
                    call_mouseFunc
            case ... // other input events

        if( redisplay ):
            call_displayFunc
            redisplay = False
        else
            call_idleFunc


glutPostRedisplay:
    redisplay = True

glutPostRedisplay の目的は、次の反復で表示関数を呼び出すことを glutMainLoop に示すフラグを設定することです。

于 2013-03-15T10:45:14.103 に答える