日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GLUT及其函数的用法整理

發布時間:2025/6/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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及其函数的用法整理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。