在此簡單介紹一下OpenGL的函數庫及OpenGL實用工具包(GLUT):
1、核心庫 115個庫函數,每個函數都以gl開頭,這些函數是最基本的,它們可以在任何OpenGL的工作平臺上應用。這些函數用于建立各種各樣的形體,產生光照效果,進行反走樣以及進行紋理映射,進行投影變換等等。由于這些核心函數有許多種形式并能夠接受不同類型的參數,實際上這些函數可以派生出300多個函數。
2、實用庫:43個函數,每個函數以glu開頭;是比OpenGL核心函數更高一層的函數,這些函數是通過調用核心函數來起作用的。它們可以在任何OpenGL的工作平臺上應用。這些函數提供了十分簡單的用法,從而減輕了開發者的編程負擔。OpenGL的實用函數包括紋理映射、坐標變換、多邊形分化、繪制一些如橢球、圓柱、茶壺等簡單多邊形實體等。這部分函數象核心函數一樣在任何OpenGL平臺都可以應用。
3、輔助庫:31個函數,每個函數以aux開頭;這些函數本來是用于初學者做簡單的練習之用,因此這些函數不能在所有的OpenGL平臺上使用,在Windows NT環境下可以使用這些函數。這些函數使用簡單,它們可以用于窗口管理、輸入輸出處理以及繪制一些簡單的三維形體。為了使OpenGL的應用程序具有良好的移植性,在使用OpenGL輔助庫的時候應謹慎。
4、專用庫函數,每種窗口都有一個用于擴展窗口系統功能,以支持OpenGL渲染的函數庫。在使用X窗口系統的計算機中,提供了X窗口系統的OpenGL擴展(GLX),作為OpenGL的附加。GLX庫函數的名稱中包含前綴"glX"。在windows系統上,6個以wgl開頭的函數提供了額windows和OpenGL之間的接口。
5、OpenGL實用工具包(GLUT,OpenGL Utility Toolkit)是Mark Kilgard開發的一個獨立于窗口系統的工具包,用于繞開窗口系統API的復雜性。GLUT函數名中包含前綴"glut"。
6、Win32 API函數:5個函數,函數前面沒有專用前綴;用于處理象素存儲格式和雙緩沖區,顯然這些函數僅僅能夠用于Win32系統而不能用于其他OpenGL平臺。
OpenGL實用工具包(GLUT)介紹:
OpenGL包含渲染函數,但被涉及成獨立于任何窗口系統和操作系統。因此,OpenGL并沒用用于打開窗口以及檢測鍵盤或鼠標事件的函數。GLUT庫被用來簡化這些相關任務,此外還提供了一些用于創建復雜三位物體(如球體、圓環和茶壺等)的函數。
窗口管理函數
glutInit(int *argc, char **argv),初始化GLUT并處理命令行參數,應在調用其他GLUT函數前調用glutInit()。
glutInitDisplayMode(unsigned int mode),指定使用RGBA模式還是顏色索引模式。還可以指定使用單緩存還是雙緩存等。
glutInitWindowPosition(int x, int y),指定窗口左上角在屏幕上的位置。
glutInitWindowSize(int width, int size),指定窗口的大小,單位為象素。
int glutCreateWindow(char *string),使用一個OpenGL場景創建一個窗口,該函數返回一個標識符,唯一的標識新建的窗口,注意,在調用glutMainLoop()之前,窗口不會被顯示出來。
顯示回調函數
glutDisplayFunc(void(*func)(void))是最重要的時間回調函數。每當GLUT認為需要重新顯示窗口的內容時,都將執行函數glutDisplayFunc()函數注冊的回調函數,因此,應將為重新繪制場景需要調用的函數都放到顯示回調函數中。如果程序修改了窗口的內容,可能需要調用函數glutPostRedisplay(void),它提醒函數glutMainLoop調用注冊的顯示回調函數。
運行程序
glutMainLoop(void),顯示創建的所有窗口,被渲染到這些窗口中的內容也將顯示出來。程序開始事件處理,這冊的顯示回調函數被觸發,進入該循環,便不會退出。
處理輸入事件
glutReshapeFunc(void(*func)(int w, int h)),指定窗口大小發生改變時應采取的措施;
glutKeyboardFunc(void(*func)(unsigned char key, int x, int y))和glutMouseFunc(void(*func)(int button,int state,int x,int y)),指定當特定的鍵和鼠標按鈕被按下或者松開時應調用的回調函數。
glutMotionFunc(void(*func)(int x, int y)),這冊了當用戶按下鼠標按鈕并移動鼠標時應調用的回調函數。
管理后臺處理
glutIdleFunc(void(*func)(void))指定一個在沒有其他事件需要處理時(如事件循環空閑)執行的函數。
繪制三維物體
glutWireCube(GLdouble size)、glutSolidCube(GLdouble size)、glutWireSphere(GLdouble radius, GLint slices,GLint statcks)、glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)等