2013-05-27 26 views
1

我有它加載的對象文件一個OpenGL項目時,對象被加載後,我希望能夠將其與鍵盤平滑移動,所以我寫了這個代碼塊做的工作:如何強制GLUT在函數返回之前重畫場景?

while (remains) { 
    if (x_remains) { 
     refPosition[0] += speed.x; 
     if (refPosition[0] > nextPos[0]) { 
      x_remains = false; 
     } 
    } 
    if (y_remains) { 
     refPosition[1] += speed.y; 
     if (refPosition[1] > nextPos[1]) { 
      y_remains = false; 
     } 
    } 
    if (z_remains) { 
     refPosition[2] += speed.z; 
     if (refPosition[2] >= nextPos[2]) { 
      z_remains = false; 
     } 
    } 

    remains = x_remains || y_remains || z_remains;   
    glutPostRedisplay(); 
} 

爲你看,我想重新顯示在屏幕上出現場景,但是當這個執行glutpostredisplay()只設置一個標誌和場景是在主循環的下一次迭代重繪。我的問題是如何能夠重新繪製的場景而下一個循環之前,函數返回

+1

什麼功能是本'在while'循環? –

+0

通常你使用空閒函數而不是while循環。您可以隨時切換空閒功能,以支持不同的「迭代」模式。 – datenwolf

+0

這同時是爲什麼我使用過剩命名鍵盤 – Mehdi

回答

0

之前,您不會失去性能或者通過glutPostRedisplay去,而不是直接繪製見生澀渲染。 (或者,如果每微秒真的是那麼珍貴,爲什麼你會用GLUT開始?)

在某些系統上,無論如何都不能在顯示函數之外繪製,因爲GL上下文無效。

這不是GLUT獨有的。所有現代的圖形/ GUI工具包我熟悉還需要你有一個被通過的事件處理程序調用指定的顯示功能,無論是WM_PAINT消息是NSView的drawRect:或什麼的。

如果您的程序沒有順利更新,則會出於其他原因。

+0

你說的鍵盤迴調函數,我應該怎麼用,而不是它?我想能夠在一個循環中重繪我的場景.. – Mehdi

相關問題