**
glut允許我們編寫程式,在裡面加入鍵盤輸入控制,包括了普通鍵,和其他特殊鍵(如f1,up)。在這一章裡我們將學習如何去檢測哪個鍵被按下,可以從glut裡得到些什麼資訊,和如何處理鍵盤輸入。
處理按鍵訊息,我們必須使用glut通知視窗系統,當某個鍵被按下時,哪個函式將完成所要求的操作。我們同樣是呼叫乙個函式註冊相關的**函式。
當你按下乙個鍵後,glut提供了兩個函式為這個鍵盤訊息註冊**。第乙個是glutkeyboardfunc。這個函式是告訴視窗系統,哪乙個函式將會被呼叫來處理普通按鍵訊息。 普通鍵是指字母,數字,和其他可以用ascii**表示的鍵。函式原型如下:
void glutkeyboardfunc(void(*func)(unsigned char key,int x,int y));
引數:
func: 處理普通按鍵訊息的函式的名稱。如果傳遞null,則表示glut忽略普通按鍵訊息。
這個作為glutkeyboardfunc函式引數的函式需要有三個形參。第乙個表示按下的鍵的ascii碼,其餘兩個提供了,當鍵按下時當前的滑鼠位置。滑鼠位置是相對於當前客戶視窗的左上角而言的。
乙個經常的用法是當按下escape鍵時退出應用程式。注意,我們提到過,glutmainloop函式產生的是乙個永無止境的迴圈。唯一的跳出迴圈的方法就是呼叫系統exit函式。這就是我們函式要做的,當按下escape鍵呼叫exit函式終止應用程式(同時要記住在源**包含標頭檔案stdlib.h)。下面就是這個函式的**:
void processnormalkeys(unsigned char key,int x,int y)
下面讓我們控制特殊鍵的按鍵訊息。glut提供函式glutspecialfunc以便當有特殊鍵按下的訊息時,你能註冊你的函式。函式原型如下:
void glutspecialfunc(void (*func)(int key,int x,int y));
引數:
func: 處理特殊鍵按下訊息的函式的名稱。傳遞null則表示glut忽略特殊鍵訊息。
下面我們寫乙個函式,當一些特殊鍵按下的時候,改變我們的三角形的顏色。這個函式使在按下f1鍵時三角形為紅色,按下f2鍵時為綠色,按下f3鍵時為藍色。
void processspecialkeys(int key, int x, int y)
} 上面的glut_key_*在glut.h裡已經被預定義為常量。這組常量如下:
glut_key_f1 f1 function key
glut_key_f2 f2 function key
glut_key_f3 f3 function key
glut_key_f4 f4 function key
glut_key_f5 f5 function key
glut_key_f6 f6 function key
glut_key_f7 f7 function key
glut_key_f8 f8 function key
glut_key_f9 f9 function key
glut_key_f10 f10 function key
glut_key_f11 f11 function key
glut_key_f12 f12 function key
glut_key_left left function key
glut_key_right up function key
glut_key_up right function key
glut_key_down down function key
glut_key_page_up page up function key
glut_key_page_down page down function key
glut_key_home home function key
glut_key_end end function key
glut_key_insert insert function key
為了讓上面processspecialkeys函式能過編譯通過,我們還必須定義,red,green,blue三個變數。此外為了得到我們想要的結果,我們還必須修改renderscene函式。
...
// 所有的變數被初始化為1,表明三角形最開始是白色的。
float red=1.0, blue=1.0, green=1.0;
void renderscene(void)
下面我們就該告訴glut,我們剛剛定義的函式用來處理,按鍵訊息。也就是該呼叫glutkeyboardfunc和glutspecialfunc函式。我們在main函式裡呼叫它們。
ctrl,alt和shift
一些時候我們想知道要是乙個組合鍵(modifier key)也就是ctrl,alt或者shift被按下該如何處理。glut提供了乙個函式來檢測是否有組合鍵被按下。這個函式僅僅只能在處理按鍵訊息或者滑鼠訊息函式裡被呼叫。函式原型如下:
int glutgetmodifiers(void);
這個函式的返回值是三個glut.h裡預定義的常量裡的乙個,或它們的或組合。這三個常量是:
1:glut_active_shift: 返回它,當按下shift鍵或按下caps lock,注意兩者同時按下時,不會返回這個值。
2:glut_active_ctrl: 返回它,當按下ctrl鍵。
3:glut_active_atl:返回它,當按下atl鍵。
注意,視窗系統可能會擷取一些組合鍵(modifiers),這是就沒有**發生。現在讓我們擴充processnormalkeys,處理組合鍵。按下r鍵時red變數被設定為0.0,當按下atl+r時red被設定為1.0。**如下:
void processnormalkeys(unsigned char key, int x, int y)
} 注意如果我們按下r鍵,將不會有什麼發生,因為r與r鍵的ascii碼不同。即這是兩個不同的鍵。最後就是如何檢測按鍵ctrl+alt+f1?。這種情況下,我們必須同時檢測兩個組合鍵,為了完成操作我們需要使用或操作符。下面的**段,使你按下ctrl+alt+f1時顏色改變為紅色。
void processspecialkeys(int key, int x, int y)
break;
case glut_key_f2 :
red = 0.0;
green = 1.0;
blue = 0.0; break;
case glut_key_f3 :
red = 0.0;
green = 0.0;
blue = 1.0; break; } }
OpenGL鍵盤操作和動畫
前面三篇文章已經把opengl的程式設計基本結構描述完畢。以後會在這個基礎上逐漸深化,不斷增添新內容。這一篇是講述 鍵盤操作和動畫基礎 實際還差的遠哪 只是個簡單的能由使用者控制的動畫,讓物體前後移動,左右旋轉。是我們自 己的第乙個quake!當然這個版本誰買誰上當,呵呵。這篇的另乙個目的就是加深前...
鍵盤控制移動
pathgo 導航模組的預設固定 ip 是 192.168.31.200 預設使用者名為eaibot 預設密碼為 eaibot 開啟乙個終端,執行以下命令,啟動底盤驅動 帶平滑加減速 ssh eaibot 192.168.31.200 roslaunch dashgo driver demo.lau...
iPhone控制鍵盤
有時候當鍵盤彈出時會把輸入框蓋住,這時候我們就沒法看到自己到底輸入的是什麼了,這時候我們就需要註冊兩個事件,那就是在鍵盤顯示的時候 把輸入框的位置放在可見的地方 當關閉鍵盤時,在將輸入框還原,以下就是解決問題的具體方法,我們只要註冊就可以了 call this method somewhere in...