2016-08-02 5 views
0

は、通常、GLU​​Tアプリケーションは次のパターンで構成されます。のOpenGL/GLUT変更コールバック)

  • 私は唯一の図面へのアクセス権を持っている
  • glutMainLoop()

いくつかの初期のものメインループ内のコールバック関数。 初期化部分を変更することはできません。 このループ内で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コールバックのために働くそれらを切り替えます。たとえば、ロード・スクリーンを表示したいとしたら、ディスプレイ・コールバックをロード・スクリーン表示機能に切り替え、ロードが完了してシーン・レンダリング機能に変わるのは理にかなっています。

関連する問題