int glutGet(GLenum state);
檢索指定的GLUT狀態
參數:
state:指定要檢索的狀態類型,為以下常量:
GLUT_WINDOW_X:當前窗口的x坐標,以像素為單位.
GLUT_WINDOW_Y:當前窗口的y坐標,以像素為單位.
GLUT_WINDOW_WIDTH:當其窗口的寬度,以像素為單位.
GLUT_WINDOW_HEIGHT:當前窗口的高度,以像素為單位.
GLUT_WINDOW_BUFFER_SIZE:當前窗口中,顏色分量占用的位數,即用多少bit表示顏色分量.
GLUT_WINDOW_STENCIL_SIZE:當前窗口中,蒙板分量占用的位數,即用多少bit表示蒙板分量.
GLUT_WINDOW_DEPTH_SIZE:當前窗口中,深度分量占用的位數,即用多少bit表示深度分量.
GLUT_WINDOW_RED_SIZE:當前窗口中,紅色分量占用的位數,即用多少bit表示紅色分量.
GLUT_WINDOW_GREEN_SIZE:當前窗口中,綠色分量占用的位數,即用多少bit表示綠色分量.
GLUT_WINDOW_BLUE_SIZE:當前窗口中,藍色分量占用的位數,即用多少bit表示藍色分量.
GLUT_WINDOW_ALPHA_SIZE:當前窗口中,alpha色分量占用的位數,即用多少bit表示alpha色分量.
GLUT_WINDOW_ACCUM_RED_SIZE:當前窗口累積緩存中,紅色分量占用的位數,即用多少bit表示紅色分量.
GLUT_WINDOW_ACCUM_GREEN_SIZE:當前窗口累積緩存中,綠色分量占用的位數,即用多少bit表示綠色分量.
GLUT_WINDOW_ACCUM_BLUE_SIZE:當前窗口累積緩存中,藍色分量占用的位數,即用多少bit表示藍色分量.
GLUT_WINDOW_ACCUM_ALPHA_SIZE:當前窗口累積緩存中,alpha色分量占用的位數,即用多少bit表示alpha色分量.
GLUT_WINDOW_DOUBLEBUFFER:如果窗口式雙緩存模式,返回1,否則返回0.
GLUT_WINDOW_RGBA:如果窗口是RGBA模式,返回1,否則返回0.
GLUT_WINDOW_PARENT:查詢當前窗口的父窗口個數,如果為頂層窗口返回0.
GLUT_WINDOW_NUM_CHILDREN:查詢當前窗口的子窗口個數.
GLUT_WINDOW_NUM_SAMPLES:查詢多重采樣的采樣點個數.
GLUT_WINDOW_STEREO:查詢是否使用立體模式,是則返回1,否則返回0.
GLUT_WINDOW_CURSOR:返回光標的整數標示.
GLUT_SCREEN_HEIGHT:屏幕的高度,以像素為單位.
GLUT_SCREEN_WIDTH:屏幕的寬度,以像素為單位.
GLUT_SCREEN_WIDTH_MM:屏幕的寬度,以毫米為單位.
GLUT_SCREEN_HEIGHT_MM:屏幕的高度,以毫米為單位.
GLUT_MENU_NUM_ITEMS:查詢當前菜單包含的菜單項的個數.
GLUT_DISPLAY_MODE_POSSIBLE:查詢窗口系統是否支持當前的顯示模式,1表示支持,0表示不支持.
GLUT_INIT_DISPLAY_MODE:初始窗口的顯示模式.
GLUT_INIT_WINDOW_X:初始窗口的x坐標.
GLUT_INIT_WINDOW_Y:初始窗口的y坐標.
GLUT_INIT_WINDOW_WIDTH:初始窗口的寬度.
GLUT_INIT_WINDOW_HEIGHT:初始窗口的高度.
GLUT_ELAPSED_TIME:返回兩次調用glutGet(GLUT_ELAPSED_TIME)的時間間隔,單位為毫秒,返回值根據查詢的內容返回相應的值,無效的狀態名返回-1.
GLUT_WINDOW_COLORMAP_SIZE:返回顏色索引表的大小.
//*******************************************************************************************
int glutDeviceGet(GLenum type);
檢索設備信息
參數:
type:要檢索的設備信息的名字,為以下常量:
GLUT_HAS_KEYBOARD 如果鍵盤可用,返回非0值,否則,返回0.
GLUT_HAS_MOUSE 如果鼠標可用,返回非0值,否則,返回0.
GLUT_NUM_MOUSE_BUTTONS 返回鼠標支持的按鍵數,如果鼠標不可用,返回0,返回值0,表示檢索的設備不存在,非0表示設備可用.
GLUT_HAS_SPACEBALL:如果spaceball可用,返回非0值,否則,返回0.
GLUT_HAS_DIAL_AND_BUTTON_BOX:如果撥號按鍵盒可用,返回非0值,否則,返回0.
GLUT_HAS_TABLET:如果圖形板可用,返回非0值,否則,返回0.
GLUT_NUM_SPACEBALL_BUTTONS:返回spaceball支持的按鍵數,如果spaceball不存在,返回0.
GLUT_NUM_BUTTON_BOX_BUTTONS:返回撥號按鍵盒支持的按鍵數,如果撥號按鍵盒不存在,返回0.
GLUT_NUM_DIALS:返回撥號按鍵盒支持的撥號數,如果撥號按鍵盒不存在,返回0.
GLUT_NUM_TABLET_BUTTONS:返回圖形板支持的按鍵數,如果圖形板不存在,返回0.
GLUT_DEVICE_IGNORE_KEY_REPEAT:如果當前窗口被設置成關閉自動重復按鍵,則返回非0值.
GLUT_DEVICE_KEY_REPEAT:返回自動重復按鍵的設置狀態.(說明文件上說是返回連續擊鍵的速率,其實此說法有誤.)
GLUT_HAS_JOYSTICK:如果操縱桿可用,返回非0值,否則,返回0.
GLUT_OWNS_JOYSTICK:如果glut認為已經成功獲得操縱桿的使用權,則返回非0值.否則,返回0.
GLUT_JOYSTICK_BUTTONS:返回操縱桿支持的按鍵數,如果操縱桿不存在,返回0.
GLUT_JOYSTICK_AXES:返回操縱桿支持的操縱軸數,如果操縱桿不存在,返回0.
GLUT_JOYSTICK_POLL_RATE:返回當前窗口操縱桿被拉動的速率.
(注:對操縱桿的查詢限制在操縱桿的數量為1;鼠標被默認為存在,并且其按鍵數默認是3.)
//******************************************************************************************
int glutExtensionSupported(const char *name);
判定是否支持特定的OpenGL擴展
參數:
extension:指定要測試的OpenGL擴展的名稱,如果給定擴展獲得支持,函數返回非0,否則返回0.
必須要有一個有效的當前窗口來調用glutExtensionSupported().它只返回OpenGL擴展信息,這意味著窗口系統依賴的擴展不被glutExtensionSupported()反映.
例子:
if(!glutExtensionSupported("GL_EXT_texture"))
{
fprintf(stderr, "Missing the texture extension!");
exit(1);
}
//******************************************************************************************
int glutGetModifiers(void);
返回組合功能鍵的狀態
返回值為以下定義的常量
GLUT_ACTIVE_SHIFT:當按下shift鍵時
GLUT_ACTIVE_CTRL:當按下ctrl鍵時
GLUT_ACTIVE_ALT:當按下alt鍵時
//******************************************************************************************
int glutLayerGet(GLenum type);
查詢屬于當前窗口的重疊層的狀態
參數:
type:查詢的重疊層狀態常量:
GLUT_OVERLAY_POSSIBLE:在給定的初始顯示模式下,能否為當前窗口創建重疊層.如果能,返回1;如果不能,返回0.
GLUT_LAYER_IN_USE:返回當前的使用層,為GLUT_NORMAL(使用正常的顏色層)或GLUT_OVERLAY(使用重疊層).
GLUT_HAS_OVERLAY:判斷當前窗口是否創建了重疊層.
GLUT_NORMAL_DAMAGED:如果當前窗口的圖像層在上一次顯示回調函數調用后已經破壞,則返回TRUE.
GLUT_OVERLAY_DAMAGED:如果當前窗口的重疊層在上一次顯示回調函數調用后已經破壞,則返回TRUE.
GLUT_TRANSPARENT_INDEX:返回當前窗口覆蓋層的透明顏色索引值,如果沒有覆蓋層則返回-1.
void glutIgnoreKeyRepeat(int ignore);
確認是否忽略自動的連續擊鍵(即當一個鍵被長時間按下不松開時,判斷其為一次擊鍵或是多次擊鍵).只對當前窗口有效.對glutKeyboardFunc()和glutSpecialFunc()兩個回調函數起作用.
參數:
ignore:(相當于布爾值)
0 :不忽略,即認為是連續擊鍵
非0:忽略,即認為是一次擊鍵
//*******************************************************************************************
void glutSetKeyRepeat(int repeatMode);
設置自動連續擊鍵模式的狀態
參數:repeatMode:
GLUT_KEY_REPEAT_OFF :關閉自動連續擊鍵
GLUT_KEY_REPEAT_ON :打開自動連續擊鍵
GLUT_KEY_REPEAT_DEFAULT:將自動連續擊鍵模式重置為默認狀態
注意:這個函數工作在全局范圍內,即它會影響所有窗口而不僅僅是當前窗口,所以當關閉了自動連續擊鍵模式后,確保在關閉當前程序銷毀前,將自動連續擊鍵模式重置為默認狀態.
這個函數的安全性不好,最好使用安全性高的glutIgnoreKeyRepeat(),盡量將操作限制在當前窗口,而不要輕易使用工作在全局狀態下的函數.
//*******************************************************************************************
void glutForceJoystickFunc(void);
強制調用當前窗口注冊的操縱桿回調函數glutJoystickFunc()一次.
void glutDisplayFunc(void (*func)(void));
注冊當前窗口的顯示回調函數
參數:
func:形為void func()的函數,完成具體的繪制操作
這個函數告訴GLUT當窗口內容必須被繪制時,那個函數將被調用.當窗口改變大小或者從被覆蓋的狀態中恢復,或者由于調用glutPostRedisplay()函數要求GLUT更新時,執行func參數指定的函數.
//*******************************************************************************************
void glutReshapeFunc(void (*func)(int width, int height));
指定當窗口的大小改變時調用的函數
參數:
func:形如void func(int width, int height)
處理窗口大小改變的函數.
width,height:為窗口改變后長寬.
這個函數確定一個回調函數,每當窗口的大小或形狀改變時(包括窗口第一次創建),GLUT將會調用這個函數,這個回調函數接受這個窗口新的長寬作為輸入參數.
//*******************************************************************************************
void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y));
注冊當前窗口的鍵盤回調函數
參數:
func:形如void func(unsigned char key, int x, int y)
key:按鍵的ASCII碼
x,y:當按下鍵時鼠標的坐標,相對于窗口左上角,以像素為單位
當敲擊鍵盤按鍵(除了特殊按鍵,即glutSpecialFunc()中處理的按鍵,詳見glutSpecialFunc())時調用.
//******************************************************************************************
void glutMouseFunc(void (*func)(int button, int state, int x, int y));
注冊當前窗口的鼠標回調函數
參數:
func:形如void func(int button, int state, int x, int y);
button:鼠標的按鍵,為以下定義的常量
GLUT_LEFT_BUTTON:鼠標左鍵
GLUT_MIDDLE_BUTTON:鼠標中鍵
GLUT_RIGHT_BUTTON:鼠標右鍵
state:鼠標按鍵的動作,為以下定義的常量
GLUT_UP:鼠標釋放
GLUT_DOWN:鼠標按下
x,y:鼠標按下式,光標相對于窗口左上角的位置
當點擊鼠標時調用.
//******************************************************************************************
void glutMotionFunc(void (*func)(int x, int y));
當鼠標在窗口中按下并移動時調用glutMotionFunc注冊的回調函數
void glutPassiveMotionFunc(void (*func)(int x, int y));
當鼠標在窗口中移動時調用glutPassiveMotionFunc注冊的回調函數
參數:
func:形如void func(int x, int y);
x,y:鼠標按下式,光標相對于窗口左上角的位置,以像素為單位
//*******************************************************************************************
void glutEntryFunc(void (*func)(int state));
設置鼠標的進出窗口的回調函數
參數:
func:形如void func(int state);注冊的鼠標進出回調函數
state:鼠標的進出狀態,為以下常量之一
GLUT_LEFT 鼠標離開窗口
GLUT_RIGHT 鼠標進入窗口
當窗口取得焦點或失去焦點時調用這個函數,當鼠標進入窗口區域并點擊時,state為GLUT_RIGHT,當鼠標離開窗口區域點擊其他窗口時,state為GLUT_LEFT.
//******************************************************************************************
void glutVisibilityFunc(void (*func)(int state));
設置當前窗口的可視回調函數
參數:
func:形如void func(int state);指定的可視回調函數
state:窗口的可視性,為以下常量
GLUT_NOT_VISIBLE 窗口完全不可見
GLUT_VISIBLE 窗口可見或部分可見
這個函數設置當前窗口的可視回調函數,當窗口的可視性改變時,該窗口的可視回調函數被調用.只要窗口中的任何一個像素是可見的,或者他的任意一個子窗口中任意一個像素是可見的,GLUT則認為窗口是可見的.
//*******************************************************************************************
void glutIdleFunc(void (*func)(void));
設置空閑回調函數
參數:
func:形如void func(void);
當系統空閑時調用.
//*******************************************************************************************
void glutTimerFunc(unsigned int millis, void (*func)(int value), int value);
注冊一個回調函數,當指定時間值到達后,由GLUT調用注冊的函數一次
參數:
millis:等待的時間,以毫秒為單位
unc:形如void func(int value)
value:指定的一個數值,用來傳遞到回調函數func中
這個函數注冊了一個回調函數,當指定的毫秒數到達后,這個函數就調用注冊的函數,value參數用來向這個注冊的函數中傳遞參數. 但只能觸發一次,若要連續觸發,則需在func中重新設置計時函數glutTimerFunc();
//*******************************************************************************************
void glutMenuStateFunc(void (*func)(int state));
注冊菜單狀態回調函數
參數:
func:形如void func(int state);
state:
GLUT_MENU_IN_USE:菜單被使用.
GLUT_MENU_NOT_IN_USE:菜單不再被使用,即菜單被關閉.
如果state代入GLUT_MENU_IN_USE,則當菜單被使用時調用該函數;
如果state代入GLUT_MENU_NOT_IN_USE,則當菜單被關閉時調用該函數.
//*******************************************************************************************
void glutMenuStatusFunc(void (*func)(int status, int x, int y));
設置菜單狀態回調函數
參數:
func:形如void func(int status, int x, int y);
status:當前是否使用菜單,為以下定義的常量
GLUT_MENU_IN_USE:菜單正在使用
GLUT_MENU_NOT_IN_USE:菜單未被使用
x,y:鼠標按下時,光標相對于窗口左上角的位置
這個函數調用時glut程序判定是否正在使用菜單,當彈出菜單時,調用注冊的菜單狀態回調函數,同時status設置為常量GLUT_MENU_IN_USE,當菜單使用完畢時,也調用菜單狀態回調函數,此時status變量變為GLUT_MENU_NOT_IN_USE.從已彈出的菜單中再彈出的菜單不產生菜單狀態回調過程.每個glut程序只有一個菜單狀態回調函數. 此函數與上面一個函數相比,只是多傳了一個光標位置,其他相同.
//*******************************************************************************************
void glutSpecialFunc(void (*func)(int key, int x, int y));
設置當前窗口的特定鍵的回調函數
參數:
Func:形如void func(int key, int x, int y);
key:按下的特定鍵,為以下定義的常量
GLUT_KEY_F1:F1功能鍵
GLUT_KEY_F2:F2功能鍵
GLUT_KEY_F3:F3功能鍵
GLUT_KEY_F4:F4功能鍵
GLUT_KEY_F5:F5功能鍵
GLUT_KEY_F6:F6功能鍵
GLUT_KEY_F7:F7功能鍵
GLUT_KEY_F8:F8功能鍵
GLUT_KEY_F9:F9功能鍵
GLUT_KEY_F10:F10功能鍵
GLUT_KEY_F11:F11功能鍵
GLUT_KEY_F12:F12功能鍵
GLUT_KEY_LEFT:左方向鍵
GLUT_KEY_UP:上方向鍵
GLUT_KEY_RIGHT:右方向鍵
GLUT_KEY_DOWN:下方向鍵
GLUT_KEY_PAGE_UP:PageUp鍵
GLUT_KEY_PAGE_DOWN:PageDown鍵
GLUT_KEY_HOME:Home鍵
GLUT_KEY_END:End鍵
GLUT_KEY_INSERT:Insert鍵
x,y:當按下鍵時鼠標的坐標,相對于窗口左上角,以像素為單位
注意:ESC,回車和delete鍵由ASCII碼產生,即可以用glutKeyboardFunc()處理. 當在鍵盤上敲擊上述按鍵時調用該函數.注意與glutKeyboardFunc()的區別.
//*******************************************************************************************
void glutSpaceballMotionFunc(void (*func)(int x, int y, int z));
注冊一個當前窗口的spaceball平移的回調函數
參數:
func:形如void func(int x, int y, int z);
x,y,z:spaceball的三維空間坐標.
paceball即一種特殊的帶3D滾輪的鼠標,不僅可以前后轉動,更可以在三維空間里滾動,具體圖片,可以在百度里搜索.
當spaceball在當前注冊的窗口內平移時,調用該函數.
//*******************************************************************************************
void glutSpaceballRotateFunc(void (*func)(int x, int y, int z));
注冊一個當前窗口的spaceball轉動的回調函數
參數:
func:形如void func(int x, int y, int z);
當spaceball在當前注冊的窗口內滾動時調用.
//*******************************************************************************************
void glutSpaceballButtonFunc(void (*func)(int button, int state));
注冊當前窗口的spaceball的按鍵回調函數.
參數:
func:形如void func(int button, int state);
button:按鍵編號,從1開始,可用的按鍵編號可以通過glutDeviceGet(GLUT_NUM_SPACEBALL_BUTTONS)查詢.
state:按鍵狀態
GLUT_UP:按鍵釋放
GLUT_DOWN:按鍵按下
當spaceball在當前窗口中敲擊相應的按鍵時調用.
//*******************************************************************************************
void glutButtonBoxFunc(void (*func)(int button, int state));
注冊當前窗口的撥號按鍵盒按鍵回調函數
參數:
func:形如void func(int button, int state);
button:按鍵編號,從1開始,可用的按鍵號可通過glutDeviceGet(GLUT_NUM_BUTTON_BOX_BUTTONS)查詢
state:按鍵狀態
GLUT_UP:按鍵釋放
GLUT_DOWN:按鍵按下
當撥號按鍵盒按鍵被按下時調用.
//*******************************************************************************************
void glutDialsFunc(void (*func)(int dial, int value));
注冊當前窗口的撥號按鍵盒撥號回調函數.
參數:
func:形如void func(int dial, value);
dial:dial的編號,從1開始,可通過glutDeviceGet(GLUT_NUM_DIALS)查詢可用編號.
value:dial所撥的值,value是每次所撥的值的累加,直到溢出.
當撥號按鍵盒撥號時被調用.
//*******************************************************************************************
void glutTabletMotionFunc(void (*func)(int x, int y));
注冊圖形板移動回調函數
參數:
func:形如void func(int x, int y);
x,y:圖形板移動的坐標.
當圖形板移動時調用.
//******************************************************************************************
void glutTabletButtonFunc(void (*func)(int button, int state, int x, int y));
注冊當前窗口的圖形板按鍵回調函數
參數:
func:形如void func(int button, int state, int x, int y);
button:按鍵號,通過glutDeviceGet(GLUT_NUM_TABLET_BUTTONS)查詢可用鍵號.
state:按鍵狀態.
GLUT_UP:按鍵被按下
GLUT_DOWN:按鍵被釋放
x,y:當按鍵狀態改變時,相對于窗口的坐標.
//******************************************************************************************
void glutOverlayDisplayFunc(void (*func)(void));
注冊當前窗口的重疊層的顯示回調函數
參數:
func:形如void func(void);指向重疊層的顯示回調函數.
這個函數告訴GLUT當窗口內容必須被繪制時,那個函數將被調用.當窗口改變大小或者從被覆蓋的狀態中恢復,或者由于調用glutPostOverlayRedisplay()函數要求GLUT更新時,執行func參數指定的函數.
//*******************************************************************************************
void glutWindowStatusFunc(void (*func)(int state));
注冊當前窗口狀態的回調函數.
參數:
func:形如void func(int state);
state:窗口狀態.
GLUT_HIDDEN:窗口不可見
GLUT_FULLY_RETAINED:窗口完全未被遮擋
GLUT_PARTIALLY_RETAINED:窗口部分遮擋
GLUT_FULLY_COVERED:窗口被全部遮擋
當窗口狀態發生相應改變時調用.
//*******************************************************************************************
void glutKeyboardUpFunc(void (*func)(unsigned char key, int x, int y));
注冊釋放普通按鍵的回調函數
參數:
func:形如void func(unsigned char key, int x, int y);
key:按鍵的ASCII碼.
x,y:釋放按鍵時鼠標相對于窗口的位置,以像素為單位.
當普通按鍵被釋放時調用.
//*******************************************************************************************
void glutSpecialUpFunc(void (*func)(int key, int x, int y));
注冊釋放特殊按鍵的回調函數
參數:
func:形如void func(int key, int x, int y);
key:特殊按鍵的標識
GLUT_KEY_F1:F1功能鍵
GLUT_KEY_F2:F2功能鍵
GLUT_KEY_F3:F3功能鍵
GLUT_KEY_F4:F4功能鍵
GLUT_KEY_F5:F5功能鍵
GLUT_KEY_F6:F6功能鍵
GLUT_KEY_F7:F7功能鍵
GLUT_KEY_F8:F8功能鍵
GLUT_KEY_F9:F9功能鍵
GLUT_KEY_F10:F10功能鍵
GLUT_KEY_F11:F11功能鍵
GLUT_KEY_F12:F12功能鍵
GLUT_KEY_LEFT:左方向鍵
GLUT_KEY_UP:上方向鍵
GLUT_KEY_RIGHT:右方向鍵
GLUT_KEY_DOWN:下方向鍵
GLUT_KEY_PAGE_UP:PageUp鍵
GLUT_KEY_PAGE_DOWN:PageDown鍵
GLUT_KEY_HOME:Home鍵
GLUT_KEY_END:End鍵
GLUT_KEY_INSERT:Insert鍵
x,y:釋放特殊按鍵時鼠標相對于窗口的位置,以像素為單位.
當特殊按鍵被釋放時調用.
//******************************************************************************************
void glutJoystickFunc(void (*func)(unsigned int buttonMask, int x, int y, int z), int pollInterval);
注冊操縱桿的回調函數
參數:
buttonMask:操縱桿按鍵
GLUT_JOYSTICK_BUTTON_A
GLUT_JOYSTICK_BUTTON_B
GLUT_JOYSTICK_BUTTON_C
GLUT_JOYSTICK_BUTTON_D
x,y,z:操縱桿在三維空間內移動的位移量
pollInterval:確定檢測操縱桿的間隔時間,其單位為毫秒.
該函數在兩種情況下被調用:
1.在pollInterval所規定的時間間隔內調用.
2.在調用glutForceJoystickFunc()函數時調用一次glutJoystickFunc();
void glutReportErrors(void);
這個函數打印出OpenGL的運行時錯誤,它應該只被用在debug中,因為它的調用會降低OpenGL的速度,它所做的僅僅是不斷調用glGetError()直到沒有錯誤產生.每一個錯誤都以GLUT warning形式報告,并由gluErrorString()產生相應的錯誤信息.
void glutBitmapCharacter(void *font, int character);
繪制一個圖像字符
int glutBitmapWidth(void *font, int character);
返回一個圖像字符的寬度
參數:
font:要使用的圖像字體,如下表所示:
GLUT_BITMAP_8_BY_13:一種固定寬度字體,每個字符都放在一個8x13像素的矩形框內
GLUT_BITMAP_9_BY_15:一種固定寬度字體,每個字符都放在一個9x15像素的矩形框內
GLUT_BITMAP_TIMES_ROMAN_10:一種10點均勻間距的Times Roman字體
GLUT_BITMAP_TIMES_ROMAN_24:一種24點均勻間距的Times Roman字體
GLUT_BITMAP_HELVETICA_10:一種10點均勻間距的Helvetica字體
GLUT_BITMAP_HELVETICA_12:一種12點均勻間距的Helvetica字體
GLUT_BITMAP_HELVETICA_18:一種18點均勻間距的Helvetica字體 character:繪制的字符的ASCII碼.
int glutBitmapLength(void *font, const unsigned char *string);
獲取一個圖像字符串的寬度.
參數:
font:同上.
string:想要測量寬度的字符串.
//*******************************************************************************************
void glutStrokeCharacter(void *font, int character);
繪制一個圖形字符
int glutStrokeWidth(void *font, int character);
返回一個圖形字體的寬度
參數:
font:要使用的圖形字體,如下表所示:
GLUT_STROKE_ROMAN 一種等間距的Roman Simplex字體,僅包括32到127的ASCII字符
GLUT_STROKE_MONO_ROMAN 一種單一間距的Roman Simplex字體,僅包括32到127的ASCII字符
Character:繪制的字符的ASCII碼.
int glutStrokeLength(void *font, const unsigned char *string);
獲取一個圖形字符串的寬度
參數:
font:同上.
string:想要測量寬度的字符串.
void glutSetColor(int cell, GLfloat red, GLfloat green, GLfloat blue);
設置當前窗口當前層一個顏色表單元的顏色
參數:
cell:索引值,標記在顏色表中的位置,其值從0開始,并且必須小于顏色表的最大單元數.
當前顏色表的大小可通過調用glutGet(GLUT_WINDOW_COLORMAP_SIZE)獲得.
red:紅色成分
green:綠色成分
blue:藍色成分
//*******************************************************************************************
GLfloat glutGetColor(int cell, int component);
獲取指定的顏色索引的顏色值.
參數:
cell:索引值,標記在顏色表中的位置,其值從0開始,并且必須小于顏色表的最大單元數.
當前顏色表的大小可通過調用glutGet(GLUT_WINDOW_COLORMAP_SIZE)獲得.
component:選擇下列的值:
GLUT_RED:讓函數返回該索引的紅色成分.
GLUT_GREEN:讓函數返回該索引的綠色成分.
GLUT_BLUE:讓函數返回該索引的藍色成分.
//*******************************************************************************************
void glutCopyColormap(int win);
將邏輯顏色表從指定的窗口拷貝到當前窗口
參數:win:窗口標識符,邏輯顏色表從該窗口拷貝到當前的窗口.
void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
繪制線框球體
void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
繪制實心球體
參數:
radius:球體的半徑
slices:球體圍繞z軸分割的數目
stacks:球體沿著z軸分割的數目
繪制中心在模型坐標原點,半徑為radius的球體,球體圍繞z軸分割slices次,球體沿著z軸分割stacks次
//*******************************************************************************************
void glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
繪制線框圓錐體
void glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
繪制實心圓錐體
參數:
radius:圓錐體的半徑
height:圓錐體的高
slices:圓錐體圍繞z軸分割的數目
stacks:圓錐體沿著z軸分割的數目
圓錐體的軸為z軸方向,它的基底位于z=0的平面內,頂點z=height,圓錐體圍繞z軸分割slices個數目,沿著z軸分割stacks個數目.
//*******************************************************************************************
void glutWireCube(GLdouble size);
繪制線框立方體
void glutSolidCube(GLdouble size);
繪制實心立方體
參數:size:立方體的邊長
//*******************************************************************************************
void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
繪制線框圓環
void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
繪制實心圓環
參數:
innerRadius:圓環的內半徑
outerRadius:圓環的外半徑
nsides:圓環腔的分割數
rings:圓環的環線數
//*******************************************************************************************
void glutWireDodecahedron(void);
繪制線框十二面體
void glutSolidDodecahedron(void);
繪制實心十二面體
//*******************************************************************************************
void glutWireTeapot(GLdouble size);
繪制線框茶壺
void glutSolidTeapot(GLdouble size);
繪制實心茶壺
參數:size:茶壺的相對大小
//*******************************************************************************************
void glutWireOctahedron(void);
繪制線框八面體
void glutSolidOctahedron(void);
繪制實心八面體
//*******************************************************************************************
void glutWireTetrahedron(void);
繪制線框四面體
void glutSolidTetrahedron(void);
繪制實心四面體
//*******************************************************************************************
void glutWireIcosahedron(void);
繪制線框二十面體
void glutSolidIcosahedron(void);
繪制實心二十面體
int glutCreateMenu(void (*func)(int value));
創建一個新的彈出示菜單
參數:
func:形如void func(int a);當點擊菜單時,調用這個回調函數
value:傳遞給回調函數的數值,它由所選擇的菜單條目對應的整數值所決定
這個函數創建一個新的彈出式菜單,并返回一個唯一的標識次菜單的整型標識符,并將新建的彈出菜單與func函數關聯在一起,這樣,當選擇此菜單中的一個菜單條目時,調用回調函數func.
//******************************************************************************************
void glutDestroyMenu(int menu);
刪除指定的菜單
menu:被刪除的菜單的標識符
//******************************************************************************************
int glutGetMenu(void);
獲取當前菜單的標識符
//******************************************************************************************
void glutSetMenu(int menu);
設置為當前菜單
menu:被設置為當前菜單的標識符
//******************************************************************************************
void glutAddMenuEntry(const char *label, int value);
添加一個菜單條目
參數:
label:菜單條目的名稱
value:傳遞到菜單處理函數的值,即在glutCreateMenu中注冊的回調函數
如果用戶選擇了這個菜單條目,對應的菜單回調函數就被調用,并以value值作為傳遞給此回調函數的參數:
//*****************************************************************************************
void glutAddSubMenu(const char *label, int submenu);
在當前菜單的底部增加一個子菜單的觸發條目
參數:
label:子菜單觸發條目的名稱
submenu:子菜單的標識符
//*****************************************************************************************
void glutChangeToMenuEntry(int item, const char *label, int value);
更改當前菜單中指定菜單項
參數:
item:更改菜單項的索引(最頂層的菜單項的索引為1)
label:菜單條目的名稱
value:傳遞到菜單處理函數的值,即在glutCreateMenu中注冊的回調函數
//*****************************************************************************************
void glutChangeToSubMenu(int item, const char *label, int submenu);
將指定的當前菜單中菜單項變為子菜單觸發條目
參數:
item:更改菜單項的索引(最頂層的菜單項的索引為1)
label:子菜單觸發條目的名稱
submenu:子菜單的標識符
//*****************************************************************************************
void glutRemoveMenuItem(int item);
刪除指定的菜單項
參數:
item:當前菜單中要刪除的菜單項的索引(最頂層的菜單項的索引為1)
//*****************************************************************************************
void glutAttachMenu(int button);
把當前窗口的一個鼠標按鍵與當前菜單關聯起來
void glutDetachMenu(int button);
解除鼠標按鍵與彈出式菜單的關聯關系
參數:
button:指明何種鼠標按鍵,可用的符號為以下三種:
GLUT_LEFT_BUTTON 鼠標左鍵
GLUT_RIGHT_BUTTON 鼠標右鍵
GLUT_MIDDLE_BUTTON 鼠標中鍵
void glutEstablishOverlay(void);
創建當前窗口的重疊層,該重疊層的顯示模式由初始顯示模式決定,應在調用glutEstablishOverlay之前調用,glutInitDisplayMode函數來設置初始的顯示模式. 實現重疊層需要硬件的支持,并不是所有的系統都提供該支持,如果系統不支持重疊層,那么對glutEstablishOverlay函數的調用就會引起運行錯誤,GLUT將終止程序的運行.可以調用glutLayerGet(GLUT_OVERPLAY_POSSIBLE)來判斷系統是否支持在當前窗口中當前的顯示模式下創建重疊層.
//*****************************************************************************************
void glutRemoveOverlay(void);
刪除當前層的重疊層
//*****************************************************************************************
void glutUseLayer(GLenum layer);
改變當前窗口的使用層
參數:layer:指定窗口的使用層,為
GLUT_NORMAL:使用正常的顏色層
GLUT_OVERLAY:使用重疊層
//****************************************************************************************
void glutPostOverlayRedisplay(void);
標記當前窗口的重疊層需要重繪
//****************************************************************************************
void glutPostWindowOverlayRedisplay(int win);
標記指定窗口的重疊層需要重繪
參數:win:需要重繪的窗口的重疊層的標識符
//***************************************************************************************
void glutShowOverlay(void);
顯示當前窗口的重疊層
void glutHideOverlay(void);
隱藏當前窗口的重疊層
這兩條語句即時執行.注意一下,只有窗口可視時,使用glutShowOverlay才能使其覆蓋圖層可視.當窗口被其他窗口遮擋時,其覆蓋圖層也被遮擋從而不可視.
int glutCreateWindow(const char *title);
產生一個頂層的窗口.title作為窗口的名字,也就是窗口標題欄顯示的內容.
返回值是生成窗口的標記符,可用函數glutGetWindow()加以引用.
//******************************************************************************************
int glutCreateSubWindow(int win, int x, int y, int width, int height);
創建一個子窗口.win是其父窗口的標記符.x,y是子窗口左上角相對父窗口的位移,以像素表示.width,height是子窗口的寬和高.
//*****************************************************************************************
void glutDestroyWindow(int win);
銷毀窗口,win是所要銷毀的窗口的標識符.這個函數銷毀指定的窗口以及與窗口關聯的OpenGL上下文,重疊層,子窗口等一切與此窗口相關的內容.
//*****************************************************************************************
void glutPostRedisplay(void);
標記當前窗口的圖像層需要重新繪制,在glutMainLoop函數的事件處理循環的下一個循環中,將調用該窗口的顯示回調函數重繪該窗口的圖像層.
//******************************************************************************************
void glutPostWindowRedisplay(int win);
標記指定的窗口需重繪,在glutMainLoop函數的事件處理循環的下一個循環中,將調用該窗口的顯示回調函數重繪該窗口的圖像層.
參數:win:需刷新的窗口標識符
//******************************************************************************************
void glutSwapBuffers(void);
當窗口模式為雙緩存時,此函數的功能就是把后臺緩存的內容交換到前臺顯示.當然,只有單緩存時,使用它的功能跟用glFlush()一樣.而使用雙緩存是為了把完整圖畫一次性顯示在窗口上,或者是為了實現動畫.
//******************************************************************************************
int glutGetWindow(void);
返回當前窗口的標識符
//*****************************************************************************************
void glutSetWindow(int win);
設置標記符為win的窗口為當前窗口
//****************************************************************************************
void glutSetWindowTitle(const char *title);
設置當前窗口(必須是頂層窗口)的標題,窗口一旦建立后,窗口標題就可以由這個函數來改變
//****************************************************************************************
void glutSetIconTitle(const char *title);
設置當前窗口(必須是頂層窗口)圖標化時的標題.
//***************************************************************************************
void glutPositionWindow(int x, int y);
改變當前窗口的位置:當前窗口是頂層窗口時,x,y是相對于屏幕的的位移;當前窗口若是子窗口時,x,y是相對其父窗口原點的位移.
//***************************************************************************************
void glutReshapeWindow(int width, int height);
改變當前窗口的大小.width,height是當前窗口新的寬度和高度值,當然只能是正值.
//***************************************************************************************
void glutPopWindow(void);
在同一個父窗口的子窗口中,使當前的子窗口與排列在它前一個位置的子窗***換位置
void glutPushWindow(void);
在同一個父窗口的子窗口中,使當前的子窗口與排列在它后一個位置的子窗***換位置
這兩個函數對頂層窗口和子窗口都起作用,但函數的結果并不立即發生,直到下一個事件循環.
//****************************************************************************************
void glutIconifyWindow(void);
讓當前窗口成為一個圖標,也即是最小化,使當前窗口圖標化顯示.
//****************************************************************************************
void glutShowWindow(void);
顯示當前窗口(這時它還是可能被其它窗口擋住).
//*****************************************************************************************
void glutHideWindow(void);
隱藏當前窗口
//****************************************************************************************
void glutFullScreen(void);
把當前窗口用全屏顯示,當前窗口是頂層窗口時才有效.
//****************************************************************************************
void glutSetCursor(int cursor);
設置當前窗口的光標樣式.
參數:
cursor:指定鼠標的形狀,為下面的一種值光標的形狀
/* Basic arrows. */
GLUT_CURSOR_RIGHT_ARROW
GLUT_CURSOR_LEFT_ARROW
/* Symbolic cursor shapes. */
GLUT_CURSOR_INFO
GLUT_CURSOR_DESTROY
GLUT_CURSOR_HELP
GLUT_CURSOR_CYCLE
GLUT_CURSOR_SPRAY
GLUT_CURSOR_WAIT
GLUT_CURSOR_TEXT
GLUT_CURSOR_CROSSHAIR
/* Directional cursors. */
GLUT_CURSOR_UP_DOWN
GLUT_CURSOR_LEFT_RIGHT
/* Sizing cursors. */
GLUT_CURSOR_TOP_SIDE
GLUT_CURSOR_BOTTOM_SIDE
GLUT_CURSOR_LEFT_SIDE
GLUT_CURSOR_RIGHT_SIDE
GLUT_CURSOR_TOP_LEFT_CORNER
GLUT_CURSOR_TOP_RIGHT_CORNER
GLUT_CURSOR_BOTTOM_RIGHT_CORNER
GLUT_CURSOR_BOTTOM_LEFT_CORNER
/* Fullscreen crosshair (if available). */
GLUT_CURSOR_FULL_CROSSHAIR:
(在全屏模式下使用,等同于GLUT_CURSOR_CROSSHAIR)
/* Blank cursor. */
GLUT_CURSOR_NONE:不顯示鼠標
/* Inherit from parent window. */
GLUT_CURSOR_INHERIT:使用父窗口的鼠標
//****************************************************************************************
void glutWarpPointer(int x, int y);
這個函數將鼠標指針移動到一個相對于當前窗口左上角的新的位置,以窗口左上角為原點,右為X軸正方向,下為Y軸正方向,參數x,y是在這個坐標系中的點,可以為負值.如果坐標值超出屏幕可見范圍,則將該值強行控制在屏幕可見范圍以內.一般情況下這個函數最好不要使用, 因為鼠標動作還是留給用戶控制比較人性化.