?glut庫(kù)下的主要函數(shù):?
一。初始化?
?void?glutInit(int*?argc,char**?argv)?
?這個(gè)函數(shù)用來(lái)初始化GLUT庫(kù)。對(duì)應(yīng)main函數(shù)的形式應(yīng)是:int?main(int?argc,char*?argv[]);?
?這個(gè)函數(shù)從main函數(shù)獲取其兩個(gè)參數(shù)。?
??
?void?glutInitWindowSize(int?width,int?height);?
?void?glutInitWindowPosition(int?x,int?y);?
?這兩個(gè)函數(shù)很好理解是設(shè)置glut程序要產(chǎn)生的窗口的大小和位置(左上角)。以像素為單位。?
?void?glutInitDisplayMode(unsigned?int?mode);?
?設(shè)置圖形顯示模式。參數(shù)mode的可選值為:?
?GLUT_RGBA:當(dāng)未指明GLUT—RGBA或GLUT—INDEX時(shí),是默認(rèn)使用的模式。表明欲建立RGBA模式的窗口。?
?GLUT_RGB:與GLUT—RGBA作用相同。?
?GLUT_INDEX:指明為顏色索引模式。?
?GLUT_SINGLE:只使用單緩存?
?GLUT_DOUBLE:使用雙緩存。以避免把計(jì)算機(jī)作圖的過(guò)程都表現(xiàn)出來(lái),或者為了平滑地實(shí)現(xiàn)動(dòng)畫(huà)。?
?GLUT_ACCUM:讓窗口使用累加的緩存。?
?GLUT_ALPHA:讓顏色緩沖區(qū)使用alpha組件。?
?GLUT_DEPTH:使用深度緩存。?
?GLUT_STENCIL:使用模板緩存。?
?GLUT_MULTISAMPLE:讓窗口支持多例程。?
?GLUT_STEREO:使窗口支持立體。?
?GLUT_LUMINACE:luminance是亮度的意思。但是很遺憾,在多數(shù)OpenGL平臺(tái)上,不被支持。?
--------------------------------------------------------------------------------?
二。事件處理(Event?Processing)?
?void??glutMainLoop(void)?
?讓glut程序進(jìn)入事件循環(huán)。在一個(gè)glut程序中最多只能調(diào)用一次。一旦調(diào)用,會(huì)直到程序結(jié)束才返回。??
--------------------------------------------------------------------------------?
三。窗口管理(Window?Management)?
?int?glutCreateWindow(char*?name);?
?產(chǎn)生一個(gè)頂層的窗口。name?作為窗口的名字,也就是窗口標(biāo)題欄顯示的內(nèi)容。?
?返回值是生成窗口的標(biāo)記符,可用函數(shù)glutGetWindow()加以引用。?
?int?glutCreateSubWindow(int?win,int?x,int?y,int?width,int?height);?
?創(chuàng)建一個(gè)子窗口。win是其父窗口的標(biāo)記符。x,y是相對(duì)父窗口的位移,以像素表示。?
?width,height是子窗口的寬和高。?
?void?glutSetWindow(int?win);?
?int?glutGetWindow(void);?
?功能分別是:設(shè)置標(biāo)記符為win的窗口為當(dāng)前窗口;返回當(dāng)前窗口的標(biāo)記符。?
?void?glutDestroyWindow(int?win);?
?銷毀以win標(biāo)記的窗口。?
?void?glutPostRedisplay(void);?
?將當(dāng)前窗口打上標(biāo)記,標(biāo)記其需要再次顯示。?
?void?glutSwapBuffers(void);?
?當(dāng)窗口模式為雙緩存時(shí),此函數(shù)的功能就是把后臺(tái)緩存的內(nèi)容交換到前臺(tái)顯示。當(dāng)然,只有單緩存時(shí),使用它的功能跟用glFlush()一樣。?
?而使用雙緩存是為了把完整圖畫(huà)一次性顯示在窗口上,或者是為了實(shí)現(xiàn)動(dòng)畫(huà)。?
?void?glutPositionWindow(int?x,int?y);?
?改變當(dāng)前窗口的位置:當(dāng)前窗口是頂層窗口時(shí),x,y是相對(duì)于屏幕的的位移;當(dāng)前窗口若是子窗口時(shí),x,y是相對(duì)其父窗口原點(diǎn)的位移。?
?void?glutReshapeWindow(int?width,int?height);?
?改變當(dāng)前窗口的大小。?
?width,height是當(dāng)前窗口新的寬度和高度值,當(dāng)然只能是正值。?
?void?glutFullscreen(void);?
?讓當(dāng)前窗口全屏顯示。當(dāng)前窗口是頂層窗口時(shí)才有效。?
?void?glutPopWindow(void);?
?void?glutPushWindow(void);?
?對(duì)頂層窗口和子窗口均有效。改變當(dāng)前窗口在棧中相對(duì)于其它窗口的次序。?
?void?glutShowWindow(void);?
?void?glutHideWindow(void);?
?void?glutIconifyWindow(void);?
?這三個(gè)函數(shù)作用是改變當(dāng)前窗口的顯示狀態(tài)。?
?glutShowWindow讓當(dāng)前窗口可視(這時(shí)它還是可能被其它窗口擋住)。?
?glutHideWindow讓當(dāng)前窗口成為不可視狀態(tài)。?
?glutIconifyWindow讓當(dāng)前窗口成為一個(gè)圖標(biāo),也即是最小化。?
?glutSetWindowTitle(char*?name);?
?glutSetIconTitle(char*?name);?
?設(shè)置當(dāng)前窗口(必須是頂層窗口)的標(biāo)題和圖標(biāo)化時(shí)的標(biāo)題。?
?glutSetCursor(int?cursor);?
?設(shè)置當(dāng)前窗口的光標(biāo)樣式。?
?cursor可選值有許多:如GLUT_CURSOR_RIGHT_ARROW指向右邊的光標(biāo),GLUT_CURSOR_LEFT_ARROW指向左邊的光標(biāo),GLUT_CURSOR_INFO成為手狀。?
GLUT_CURSOR_DESTROY呈叉狀,GLUT_CURSOR_HELP呈現(xiàn)問(wèn)號(hào)的形狀。?
等等。??
--------------------------------------------------------------------------------?
四。窗口的覆蓋管理?
void?glutEstablishOverlay(void);?
對(duì)當(dāng)前窗口創(chuàng)建覆蓋圖層。該覆蓋圖的模式由初始化顯示模式函數(shù)glutDisplayMode()決定。glutLayerGet(GLUT_OVERLAY_POSSIBLE)可用以設(shè)置對(duì)于當(dāng)前窗口,是否允許產(chǎn)生由初始化顯示模式函數(shù)規(guī)定其模式的覆蓋圖層。?
void?glutUserLayer(GLenum?layer);?
枚舉量layer可選值為:GLUT_NORMAL,GLUT_OVERLAY.分別選取正常位平面或覆蓋平面。?
void?glutRemoveLayer(void);?
除去覆蓋圖。當(dāng)沒(méi)有覆蓋圖層時(shí),調(diào)用這條語(yǔ)句也是安全的,這時(shí)系統(tǒng)不做任何事。?
void?glutPostOverlayRedisplay(void);?
標(biāo)記該覆蓋圖層為需要重新顯示的狀態(tài)。?
void?glutShowOverlay(void);?
void?glutHideOverlay(void);?
顯示當(dāng)前窗口的覆蓋圖層;隱藏覆蓋圖層。這兩條語(yǔ)句即時(shí)執(zhí)行。注意一下,只有窗口可視時(shí),使用glutShowOverlay才能使其覆蓋圖層可視。當(dāng)窗口被其他窗口遮擋時(shí),其覆蓋圖層也被遮擋從而不可視。?
?
二。事件處理(Event?Processing)?
?void??glutMainLoop(void)?
?讓glut程序進(jìn)入事件循環(huán)。在一個(gè)glut程序中最多只能調(diào)用一次。一旦調(diào)用,會(huì)直到程序結(jié)束才返回。?
三。窗口管理(Window?Management)?
?int?glutCreateWindow(char*?name);?
?產(chǎn)生一個(gè)頂層的窗口。name?作為窗口的名字,也就是窗口標(biāo)題欄顯示的內(nèi)容。?
?返回值是生成窗口的標(biāo)記符,可用函數(shù)glutGetWindow()加以引用。?
?int?glutCreateSubWindow(int?win,int?x,int?y,int?width,int?height);?
?創(chuàng)建一個(gè)子窗口。win是其父窗口的標(biāo)記符。x,y是相對(duì)父窗口的位移,以像素表示。?
?width,height是子窗口的寬和高。?
?void?glutSetWindow(int?win);?
?int?glutGetWindow(void);?
?功能分別是:設(shè)置標(biāo)記符為win的窗口為當(dāng)前窗口;返回當(dāng)前窗口的標(biāo)記符。?
?void?glutDestroyWindow(int?win);?
?銷毀以win標(biāo)記的窗口。?
?void?glutPostRedisplay(void);?
?將當(dāng)前窗口打上標(biāo)記,標(biāo)記其需要再次顯示。?
?void?glutSwapBuffers(void);?
?當(dāng)窗口模式為雙緩存時(shí),此函數(shù)的功能就是把后臺(tái)緩存的內(nèi)容交換到前臺(tái)顯示。當(dāng)然,只有單緩存時(shí),使用它的功能跟用glFlush()一樣。?
?而使用雙緩存是為了把完整圖畫(huà)一次性顯示在窗口上,或者是為了實(shí)現(xiàn)動(dòng)畫(huà)。?
?void?glutPositionWindow(int?x,int?y);?
?改變當(dāng)前窗口的位置:當(dāng)前窗口是頂層窗口時(shí),x,y是相對(duì)于屏幕的的位移;當(dāng)前窗口若是子窗口時(shí),x,y是相對(duì)其父窗口原點(diǎn)的位移。?
?void?glutReshapeWindow(int?width,int?height);?
?改變當(dāng)前窗口的大小。?
?width,height是當(dāng)前窗口新的寬度和高度值,當(dāng)然只能是正值。?
?void?glutFullscreen(void);?
?讓當(dāng)前窗口全屏顯示。當(dāng)前窗口是頂層窗口時(shí)才有效。?
?void?glutPopWindow(void);?
?void?glutPushWindow(void);?
?對(duì)頂層窗口和子窗口均有效。改變當(dāng)前窗口在棧中相對(duì)于其它窗口的次序。?
?void?glutShowWindow(void);?
?void?glutHideWindow(void);?
?void?glutIconifyWindow(void);?
?這三個(gè)函數(shù)作用是改變當(dāng)前窗口的顯示狀態(tài)。?
?glutShowWindow讓當(dāng)前窗口可視(這時(shí)它還是可能被其它窗口擋住)。?
?glutHideWindow讓當(dāng)前窗口成為不可視狀態(tài)。?
?glutIconifyWindow讓當(dāng)前窗口成為一個(gè)圖標(biāo),也即是最小化。?
?glutSetWindowTitle(char*?name);?
?glutSetIconTitle(char*?name);?
?設(shè)置當(dāng)前窗口(必須是頂層窗口)的標(biāo)題和圖標(biāo)化時(shí)的標(biāo)題。?
?glutSetCursor(int?cursor);?
?設(shè)置當(dāng)前窗口的光標(biāo)樣式。?
?cursor可選值有許多:如GLUT_CURSOR_RIGHT_ARROW指向右邊的光標(biāo),GLUT_CURSOR_LEFT_ARROW指向左邊的光標(biāo),GLUT_CURSOR_INFO成為手狀。?
GLUT_CURSOR_DESTROY呈叉狀,GLUT_CURSOR_HELP呈現(xiàn)問(wèn)號(hào)的形狀。?
等等。?
四。窗口的覆蓋管理?
void?glutEstablishOverlay(void);?
對(duì)當(dāng)前窗口創(chuàng)建覆蓋圖層。該覆蓋圖的模式由初始化顯示模式函數(shù)glutDisplayMode()決定。glutLayerGet(GLUT_OVERLAY_POSSIBLE)可用以設(shè)置對(duì)于當(dāng)前窗口,是否允許產(chǎn)生由初始化顯示模式函數(shù)規(guī)定其模式的覆蓋圖層。?
void?glutUserLayer(GLenum?layer);?
枚舉量layer可選值為:GLUT_NORMAL,GLUT_OVERLAY.分別選取正常位平面或覆蓋平面。?
void?glutRemoveLayer(void);?
除去覆蓋圖。當(dāng)沒(méi)有覆蓋圖層時(shí),調(diào)用這條語(yǔ)句也是安全的,這時(shí)系統(tǒng)不做任何事。?
void?glutPostOverlayRedisplay(void);?
標(biāo)記該覆蓋圖層為需要重新顯示的狀態(tài)。?
void?glutShowOverlay(void);?
void?glutHideOverlay(void);?
顯示當(dāng)前窗口的覆蓋圖層;隱藏覆蓋圖層。這兩條語(yǔ)句即時(shí)執(zhí)行。注意一下,只有窗口可視時(shí),使用glutShowOverlay才能使其覆蓋圖層可視。當(dāng)窗口被其他窗口遮擋時(shí),其覆蓋圖層
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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