2011-04-01 45 views
3

自從我上次使用OpenGL已經過去了一年多了,所以我對這個主題很生疏。如何在處理過程中更新OpenGL中的顯示?

我有一個圖像,我正在做一些處理,顏色聚類是特定的,我想在每次循環迭代後更新圖像,以便我可以在處理結束時看到更改,而不是在處理結束時做完了。

這是目前發生的情況。顯示原始圖像,通過鍵盤迴調函數執行顏色聚類功能,處理圖像並在程序控制離開顏色聚類功能時顯示更新後的圖像。

我試過在聚類算法的每次迭代之後調用glutPostRedisplay(),並試着在那裏使用glutIdleFunc回調函數與glutPostRedisplay()。在這兩種情況下,它都不會調用顯示回調,直到圖像完成處理。

如何在圖像處理過程中更新圖像(即調用顯示回調)?

回答

4

爲了解決這個問題,我在每次迭代結束時明確地調用了顯示回調函數,而不是讓剩餘時間決定何時調用顯示回調的最佳時間。在僞代碼中,解決方案看起來像這樣。

colourClustering() 
{ 
    loop 
    { 
     image processing code 
    } 
    display() // Previously I tried using glutPostRedisplay() here. 
} 

... 

display() 
{ 
    drawing code 
    glutSwapBuffers() 
} 

... 

main() 
{ 
    .... 
    glutDisplayFunc(display); 
    .... 
} 

但是,這感覺就像一個工作,而不是一個真正的解決方案。

2

您需要確保已經繪製出最新版本的圖像(使用它來紋理完整的視口四邊看起來是最簡單的方式),然後添加一個對glutSwapBuffers()(或等效的,如果不是雙緩衝的) )在你的主GLUT循環中。

0

我知道它的hella老問題,但調用glFinish();使它立即顯示給我。

相關問題