2016-08-02 57 views
0

通常爲GLUT應用將在下面的圖案被構造:內部glutMainLoop(OpenGL的/ GLUT變化回調)

  • 一些初始化東西
  • glutMainLoop()

我只能訪問的圖主Loop中的回調函數。 我將無法更改初始化部分。 有沒有什麼辦法可以在這個循環內改變回調函數glutKeyboardFunc()?還是有另一種方法來捕獲鍵盤輸入而無需訪問初始化部分?

感謝

回答

1

是的,你可以打電話隨時glut…Func。例如,你可以有鍵盤處理功能和(背景鍵)

void keyfunc_edit(unsigned char key, int x, int y); 
void keyfunc_select(unsigned char key, int x, int y); 

void keyfunc_edit(unsigned char key, int x, int y) 
{ 
    switch(key){ 
    case 'x': 
    case 'X': 
     /* switch to select mode */ 
     glutKeyboardFunc(keyfunc_select); 
     break; 
} 

void keyfunc_select(unsigned char key, int x, int y) 
{ 
    switch(key){ 
    case 'e': 
    case 'E': 
     /* switch to edit mode */ 
     glutKeyboardFunc(keyfunc_edit); 
     break; 
} 

這適用於任何 GLUT回調,這樣你就可以切換回調顯示,空閒等,在任何時候它們之間進行切換。例如,假設你想顯示一個加載屏幕,那麼將顯示回調切換到加載屏幕顯示功能是非常合理的,並且一旦加載完成就轉換爲場景渲染功能。