GLUT及其函数的用法整理
GLUT - The OpenGL Utility Toolkit
glut是基本的窗口界面,是獨立于gl和glu的,如果不喜歡用glut可以用MFC和Win32窗口等代替,但是glut是跨平臺的,這就保證了我們編出的程序是跨平臺的,如果用MFC或者Win32只能在windows操作系統上使用。選擇OpenGL的一個很大原因就是因為它的跨平臺性,所以我們可以盡量的使用glut庫。
回調函數
回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用來調用其所指向的函數時,我們就說這是回調函數。回調函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用于對該事件或條件進行響應。
GLUT Function
初始化
void glutInit(int *argc,char **argv);這個函數用來初始化GLUT庫。對于main函數的形式是:int main(int argc,char *argv[]),這個函數從main函數獲取其兩個參數。
void glutInitWindowSize(int width,int height);
void glutInitWindowPosition(int x,int y);
這兩個函數分別設置窗口的大小和位置(相對于left,up)。以像素為單位。
void glutInitDisplayMode(unsigned int mode)設置圖形顯示模式。參數mode的可選值為:
- GLUT_RGBA: 當未指明GLUT_RGBA或者GLUT_INDEX時,是默認的使用模式。表面欲建立RGBA模式的窗口。
- GLUT_INDEX: 指明顏色索引模式。
- GLUT_SINGLE:只使用單緩存。
- GLUT_DOUBLE:使用雙緩存。以避免把計算機作圖的過程都表現出來,或者為了平滑地實現動畫。
- GLUT_ACCUM: 讓窗口使用累加的緩存。
- GLUT_ALPHA: 讓顏色緩沖區使用alpha組件。
- GLUT_DEPTH: 使用深度緩存
- GLUT_STENCIL: 使用模板緩存。
- GLUT_MULTISAMPLE: 讓窗口支持多例程。
- GLUT_STEREO: 使窗口支持立體。
- GLUT_LUMINACE: luminance是亮度的意思。但是大多數OpenGL不被支持。
事件處理(event processing)
void glutMainLoop(void);:讓glut程序進入事件循環。在一個glut程序中最多只能調用一次,一旦調用,會知道程序結束才返回
窗口管理(Window Management)
int glutCreateWindow(char *name);:產生一個頂層窗口。name作為窗口的名字,也就是窗口標題欄顯示的內容。返回值是生成窗口的標記符,可用glutGetWindow()加以引用.
int glutCreateSubWindow(int win,int x,int y,int width,int height):創建一個子窗口,win是父窗口的標記符。x,y是相對父窗口的位移,以像素表示。width,height是子窗口的寬和高。
void glutSetWindow(int win) :設置標識符為win的窗口為當前窗口
int glutGetWindow(void): 返回當前窗口的標識符.
void glutDestroyWindow(int win): 銷毀以win標記的窗口。
void glutPostRedisplay(void): 將當前窗口打上標記,標記其需要再次顯示。
void glutSwapBuffers(void):當窗口模式為雙緩存時,此函數的功能就是把后臺緩存的內容交換到前臺顯示。當然,只有單緩存時,使用它的功能跟用glFlush()一樣。
而使用雙緩存是為了把完整圖畫一次性顯示在窗口上,或者是為了實現動畫。
void glutPosition(int x,int y);:改變當前窗口的位置:當前窗口是頂層窗口時,x,y是相對于屏幕的的位移;當前窗口若是子窗口時,x,y是相對其父窗口原點的位移.
void glutReshapeWindow(int width,int height):改變當前窗口的大小
void glutFullscreen(void);:讓當前窗口全屏顯示。當前窗口是頂層窗口時才有效。
void glutPopWindow(void);, void glutPushWindow(void);:對頂層窗口和子窗口均有效。改變當前窗口在棧中相對于其它窗口的次序。
void glutIconifyWindow(void);,void glutShowWindow(void);,void glutHideWindow(void);:這三個函數作用是改變當前窗口的顯示狀態。注意:glutIconifyWindow讓當前窗口成為一個圖標,也即是最小化。
void glutSetWindowTitle(char* name);,void glutSetIconTitle(char* name);:設置當前窗口(必須是頂層窗口)的標題和圖標化時的標題。
void glutSetCursor(int cursor);:設置當前窗口的光標樣式。
cursor的可選值有:
- GLUT_CURSOR_RIGHT_ARROW指向右邊的光標
- GLUT_CURSOR_LEFT_ARROW指向左邊的光標
- GLUT_CURSOR_INFO成為手狀。
- GLUT_CURSOR_DESTROY呈叉狀
- GLUT_CURSOR_HELP呈現問號的形狀
菜單管理
int glutCreateMenu(void(*func)(int value));:當點擊菜單時,調用回調函數func,value為傳遞給回調函數的數值,它由所選擇的菜單條目對應的整數值所決定。這個函數創建一個新的彈出式菜單,并返回一個唯一的標識次菜單的整型標識符,并將新建的彈出菜單與func函數關聯在一起,這樣,當選擇此菜單中的一個菜單條目時,調用回調函數func.
void glutSetMenu(int menu);:設置當前菜單;
int glutGetMenu(void);:獲取當前菜單的標識符
void glutDestroyMenu(int menu);:刪除指定的菜單
void glutAddMenuEntry(char* name, int value);:添加一個菜單條目
void glutAddSubMenu(char* name, int menu);:在當前菜單的底部增加一個子菜單的觸發條目
void glutChangeToMenuEntry(int entry, char* name, int value);:更改當前菜單中指定菜單項
void glutChangeToSubMenu(int entry, char* name, int menu);:將指定的當前菜單中菜單項變為子菜單觸發條目
void glutRemoveMenuItem(int entry);:刪除指定的菜單項
void glutAttachMenu(int button);:把當前窗口的一個鼠標按鍵與當前菜單關聯起來
void glutDetachMenu(int button):解除鼠標按鍵與彈出式菜單的關聯關系。
注冊回調
void glutDisplayFunc(void (*func)(void));:為當前窗口設置回調函數
void glutOverlayDisplayFunc(void(*func)(void))注冊當前窗口的重疊層的顯示回調函數
void glutReshapFunc(void(*Func)(intt width,int height)):指定當前窗口的大小改變時的調用的函數
void glutKeyboardFunc(void(*func(unsign char key,int x,int y))):注冊當前窗口的鍵盤回調函數
void glutMouseFunc(void(*func)(int button,int state,int x,int y)):注冊指定當前的鼠標回調函數。
button為鼠標的按鍵:為以下定義的常量:
- GLUT_LEFT_BUTTON:鼠標左鍵
- GLUT_MIDDLE_BUTTON:鼠標中鍵
- GLUT_RIGHT_BUTTON:鼠標右鍵
state為鼠標的按鍵動作,為以下定義的常量 - GLET_UP: 鼠標釋放
- GLET_DOWN: 鼠標按下
void glutMotionFunc(void(*func)(int x,int y)):設置移動回調函數
void glutPassiveMotionFunc(void(*func)(int x,int y)):設置當前鼠標移動函數
注意:當鼠標在窗口中按下并移動時調用glutMotionFunc注冊的回調函數,當鼠標在窗口中移動時調用glutPassiveMotionFunc注冊的回調函數
void glutVisibilityFunc(void (*func) (int state) );:設置當前窗口的可視回調函數。這個函數設置當前窗口的可視回調函數,當窗口的可視性改變時,該窗口的可視回調函數被調用.只要窗口中的任何一個像素是可見的,或者他的任意一個子窗口中任意一個像素是可見的,GLUT則認為窗口是可見的.
state表示窗口的可視性,為以下常量:
- GLUT_NOT_VISIBLE:窗口完全不可見
- GLUT_VISIBLE:窗口可見或部分可見
void glutEntryFunc(void (*func) (int state));:設置鼠標的進出窗口的回調函數
Func為注冊的鼠標進出的回調函數
state為鼠標的進出回調函數,為以下常量之一:
- GLUT_LEFT:鼠標離開窗口
- GLUT_RIGHT:鼠標進入窗口
當窗口取得焦點或者失去焦點時調用這個函數,當鼠標進入窗口區域并點擊時,state為GLUT_RIGHT,當鼠標離開窗口區域點擊其他窗口時,state為GLUT_LEFT
void glutSpecialFunc(void(*func)(int key,int x,int y)):設置當前窗口的特定鍵的回調函數
key為按下的特定鍵,為以下定義的常量:
總結
以上是生活随笔為你收集整理的GLUT及其函数的用法整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: glutSwapBuffers函数用法
- 下一篇: movsb movsw movsd 指令