2

我不太明白它glutPostRedisplay()是用来做什么的。似乎当我在我的函数中调用它时,display()将在下一帧调用函数。但是我不知道该功能与动画有何关系。我们经常将用于物理计算的函数注册为Idle函数并在那里进行一些计算。但是,如果我们改变参数,比如旋转,动画对象的位置,即使我们不调用它glutPostRedisplay()display()函数本身也会重新绘制场景。为什么我们需要打电话glutPostRedisplay()

第二个问题是关于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 回答