2013-03-15 74 views
1

我不太明白glutPostRedisplay()的用途。這似乎是當我在我的函數中調用該函數時,在下一幀display()函數將被調用。但是我不知道那個函數與動畫有什麼關係。我們經常爲物理計算註冊一個函數,並在那裏做一些計算。但是,如果我們更改參數(如旋轉,具有動畫的對象的位置),即使我們不調用該函數,display()函數本身也會重繪場景。爲什麼我們需要撥打glutPostRedisplay()不明白glutPostRedisplay和glIdleFunc

第二個問題是關於glutIdleFunc()。我的問題是:是否有可能CPU太忙,我們沒有在每一幀的空閒時間?

+1

您是否有任何示例代碼可幫助我們瞭解您的情況? – rhughes 2013-03-15 05:29:37

回答

2

下面是一些僞代碼說明過剩主循環

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,在其下一次迭代應當調用顯示功能的標誌。

+0

所以,IdleFunc就像當你不調用重新顯示時,它會調用空閒?那麼什麼時候會顯示被調用?我知道當你調整窗口大小時,它會調用顯示功能。什麼是其他情況? – 2013-03-15 17:52:57

+0

@YanLi:如果顯式請求更新(glutPostRedisplay),或者窗口的內容已失效(損壞)並需要重繪,則調用顯示功能。只要窗口的某些部分不可見,OS就會發送這樣的事件。增加窗口的大小使得新的像素可見,因此重繪;然而,減小窗戶的大小並不要求這樣做。 – datenwolf 2013-03-15 18:06:01

+0

那麼閒置函數怎麼樣呢,它什麼時候會被調用呢? – 2013-03-16 17:55:59