?glut庫下的主要函數:?
一。初始化?
?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);?
?這兩個函數很好理解是設置glut程序要產生的窗口的大小和位置(左上角)。以像素為單位。?
?void?glutInitDisplayMode(unsigned?int?mode);?
?設置圖形顯示模式。參數mode的可選值為:?
?GLUT_RGBA:當未指明GLUT—RGBA或GLUT—INDEX時,是默認使用的模式。表明欲建立RGBA模式的窗口。?
?GLUT_RGB:與GLUT—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);?
?int?glutGetWindow(void);?
?功能分別是:設置標記符為win的窗口為當前窗口;返回當前窗口的標記符。?
?void?glutDestroyWindow(int?win);?
?銷毀以win標記的窗口。?
?void?glutPostRedisplay(void);?
?將當前窗口打上標記,標記其需要再次顯示。?
?void?glutSwapBuffers(void);?
?當窗口模式為雙緩存時,此函數的功能就是把后臺緩存的內容交換到前臺顯示。當然,只有單緩存時,使用它的功能跟用glFlush()一樣。?
?而使用雙緩存是為了把完整圖畫一次性顯示在窗口上,或者是為了實現動畫。?
?void?glutPositionWindow(int?x,int?y);?
?改變當前窗口的位置:當前窗口是頂層窗口時,x,y是相對于屏幕的的位移;當前窗口若是子窗口時,x,y是相對其父窗口原點的位移。?
?void?glutReshapeWindow(int?width,int?height);?
?改變當前窗口的大小。?
?width,height是當前窗口新的寬度和高度值,當然只能是正值。?
?void?glutFullscreen(void);?
?讓當前窗口全屏顯示。當前窗口是頂層窗口時才有效。?
?void?glutPopWindow(void);?
?void?glutPushWindow(void);?
?對頂層窗口和子窗口均有效。改變當前窗口在棧中相對于其它窗口的次序。?
?void?glutShowWindow(void);?
?void?glutHideWindow(void);?
?void?glutIconifyWindow(void);?
?這三個函數作用是改變當前窗口的顯示狀態。?
?glutShowWindow讓當前窗口可視(這時它還是可能被其它窗口擋住)。?
?glutHideWindow讓當前窗口成為不可視狀態。?
?glutIconifyWindow讓當前窗口成為一個圖標,也即是最小化。?
?glutSetWindowTitle(char*?name);?
?glutSetIconTitle(char*?name);?
?設置當前窗口(必須是頂層窗口)的標題和圖標化時的標題。?
?glutSetCursor(int?cursor);?
?設置當前窗口的光標樣式。?
?cursor可選值有許多:如GLUT_CURSOR_RIGHT_ARROW指向右邊的光標,GLUT_CURSOR_LEFT_ARROW指向左邊的光標,GLUT_CURSOR_INFO成為手狀。?
GLUT_CURSOR_DESTROY呈叉狀,GLUT_CURSOR_HELP呈現問號的形狀。?
等等。??
--------------------------------------------------------------------------------?
四。窗口的覆蓋管理?
void?glutEstablishOverlay(void);?
對當前窗口創建覆蓋圖層。該覆蓋圖的模式由初始化顯示模式函數glutDisplayMode()決定。glutLayerGet(GLUT_OVERLAY_POSSIBLE)可用以設置對于當前窗口,是否允許產生由初始化顯示模式函數規定其模式的覆蓋圖層。?
void?glutUserLayer(GLenum?layer);?
枚舉量layer可選值為:GLUT_NORMAL,GLUT_OVERLAY.分別選取正常位平面或覆蓋平面。?
void?glutRemoveLayer(void);?
除去覆蓋圖。當沒有覆蓋圖層時,調用這條語句也是安全的,這時系統不做任何事。?
void?glutPostOverlayRedisplay(void);?
標記該覆蓋圖層為需要重新顯示的狀態。?
void?glutShowOverlay(void);?
void?glutHideOverlay(void);?
顯示當前窗口的覆蓋圖層;隱藏覆蓋圖層。這兩條語句即時執行。注意一下,只有窗口可視時,使用glutShowOverlay才能使其覆蓋圖層可視。當窗口被其他窗口遮擋時,其覆蓋圖層也被遮擋從而不可視。?
?
二。事件處理(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);?
?int?glutGetWindow(void);?
?功能分別是:設置標記符為win的窗口為當前窗口;返回當前窗口的標記符。?
?void?glutDestroyWindow(int?win);?
?銷毀以win標記的窗口。?
?void?glutPostRedisplay(void);?
?將當前窗口打上標記,標記其需要再次顯示。?
?void?glutSwapBuffers(void);?
?當窗口模式為雙緩存時,此函數的功能就是把后臺緩存的內容交換到前臺顯示。當然,只有單緩存時,使用它的功能跟用glFlush()一樣。?
?而使用雙緩存是為了把完整圖畫一次性顯示在窗口上,或者是為了實現動畫。?
?void?glutPositionWindow(int?x,int?y);?
?改變當前窗口的位置:當前窗口是頂層窗口時,x,y是相對于屏幕的的位移;當前窗口若是子窗口時,x,y是相對其父窗口原點的位移。?
?void?glutReshapeWindow(int?width,int?height);?
?改變當前窗口的大小。?
?width,height是當前窗口新的寬度和高度值,當然只能是正值。?
?void?glutFullscreen(void);?
?讓當前窗口全屏顯示。當前窗口是頂層窗口時才有效。?
?void?glutPopWindow(void);?
?void?glutPushWindow(void);?
?對頂層窗口和子窗口均有效。改變當前窗口在棧中相對于其它窗口的次序。?
?void?glutShowWindow(void);?
?void?glutHideWindow(void);?
?void?glutIconifyWindow(void);?
?這三個函數作用是改變當前窗口的顯示狀態。?
?glutShowWindow讓當前窗口可視(這時它還是可能被其它窗口擋住)。?
?glutHideWindow讓當前窗口成為不可視狀態。?
?glutIconifyWindow讓當前窗口成為一個圖標,也即是最小化。?
?glutSetWindowTitle(char*?name);?
?glutSetIconTitle(char*?name);?
?設置當前窗口(必須是頂層窗口)的標題和圖標化時的標題。?
?glutSetCursor(int?cursor);?
?設置當前窗口的光標樣式。?
?cursor可選值有許多:如GLUT_CURSOR_RIGHT_ARROW指向右邊的光標,GLUT_CURSOR_LEFT_ARROW指向左邊的光標,GLUT_CURSOR_INFO成為手狀。?
GLUT_CURSOR_DESTROY呈叉狀,GLUT_CURSOR_HELP呈現問號的形狀。?
等等。?
四。窗口的覆蓋管理?
void?glutEstablishOverlay(void);?
對當前窗口創建覆蓋圖層。該覆蓋圖的模式由初始化顯示模式函數glutDisplayMode()決定。glutLayerGet(GLUT_OVERLAY_POSSIBLE)可用以設置對于當前窗口,是否允許產生由初始化顯示模式函數規定其模式的覆蓋圖層。?
void?glutUserLayer(GLenum?layer);?
枚舉量layer可選值為:GLUT_NORMAL,GLUT_OVERLAY.分別選取正常位平面或覆蓋平面。?
void?glutRemoveLayer(void);?
除去覆蓋圖。當沒有覆蓋圖層時,調用這條語句也是安全的,這時系統不做任何事。?
void?glutPostOverlayRedisplay(void);?
標記該覆蓋圖層為需要重新顯示的狀態。?
void?glutShowOverlay(void);?
void?glutHideOverlay(void);?
顯示當前窗口的覆蓋圖層;隱藏覆蓋圖層。這兩條語句即時執行。注意一下,只有窗口可視時,使用glutShowOverlay才能使其覆蓋圖層可視。當窗口被其他窗口遮擋時,其覆蓋圖層
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
