在此簡單介紹一下OpenGL的函數(shù)庫OpenGL實用工具包(GLUT):
1、核心庫 115個庫函數(shù),每個函數(shù)都以gl開頭,這些函數(shù)是最基本的,它們可以在任何OpenGL的工作平臺上應(yīng)用。這些函數(shù)用于建立各種各樣的形體,產(chǎn)生光照效果,進行反走樣以及進行紋理映射,進行投影變換等等。由于這些核心函數(shù)有許多種形式并能夠接受不同類型的參數(shù),實際上這些函數(shù)可以派生出300多個函數(shù)。
2、實用庫:43個函數(shù),每個函數(shù)以glu開頭;是比OpenGL核心函數(shù)更高一層的函數(shù),這些函數(shù)是通過調(diào)用核心函數(shù)來起作用的。它們可以在任何OpenGL的工作平臺上應(yīng)用。這些函數(shù)提供了十分簡單的用法,從而減輕了開發(fā)者的編程負擔。OpenGL的實用函數(shù)包括紋理映射、坐標變換、多邊形分化、繪制一些如橢球、圓柱、茶壺等簡單多邊形實體等。這部分函數(shù)象核心函數(shù)一樣在任何OpenGL平臺都可以應(yīng)用。
3、輔助庫:31個函數(shù),每個函數(shù)以aux開頭;這些函數(shù)本來是用于初學(xué)者做簡單的練習(xí)之用,因此這些函數(shù)不能在所有的OpenGL平臺上使用,在Windows NT環(huán)境下可以使用這些函數(shù)。這些函數(shù)使用簡單,它們可以用于窗口管理、輸入輸出處理以及繪制一些簡單的三維形體。為了使OpenGL的應(yīng)用程序具有良好的移植性,在使用OpenGL輔助庫的時候應(yīng)謹慎。
4、專用庫函數(shù),每種窗口都有一個用于擴展窗口系統(tǒng)功能,以支持OpenGL渲染的函數(shù)庫。在使用X窗口系統(tǒng)的計算機中,提供了X窗口系統(tǒng)的OpenGL擴展(GLX),作為OpenGL的附加。GLX庫函數(shù)的名稱中包含前綴"glX"。在windows系統(tǒng)上,6個以wgl開頭的函數(shù)提供了額windows和OpenGL之間的接口。
5、OpenGL實用工具包(GLUT,OpenGL Utility Toolkit)是Mark Kilgard開發(fā)的一個獨立于窗口系統(tǒng)的工具包,用于繞開窗口系統(tǒng)API的復(fù)雜性。GLUT函數(shù)名中包含前綴"glut"。
6、Win32 API函數(shù):5個函數(shù),函數(shù)前面沒有專用前綴;用于處理象素存儲格式和雙緩沖區(qū),顯然這些函數(shù)僅僅能夠用于Win32系統(tǒng)而不能用于其他OpenGL平臺。

OpenGL實用工具包(GLUT)介紹:
OpenGL包含渲染函數(shù),但被涉及成獨立于任何窗口系統(tǒng)和操作系統(tǒng)。因此,OpenGL并沒用用于打開窗口以及檢測鍵盤或鼠標事件的函數(shù)。GLUT庫被用來簡化這些相關(guān)任務(wù),此外還提供了一些用于創(chuàng)建復(fù)雜三位物體(如球體、圓環(huán)和茶壺等)的函數(shù)。
    窗口管理函數(shù)
   glutInit(int *argc, char **argv),初始化GLUT并處理命令行參數(shù),應(yīng)在調(diào)用其他GLUT函數(shù)前調(diào)用glutInit()。
   glutInitDisplayMode(unsigned int mode),指定使用RGBA模式還是顏色索引模式。還可以指定使用單緩存還是雙緩存等。
   glutInitWindowPosition(int x, int y),指定窗口左上角在屏幕上的位置。
   glutInitWindowSize(int width, int size),指定窗口的大小,單位為象素。
   int glutCreateWindow(char *string),使用一個OpenGL場景創(chuàng)建一個窗口,該函數(shù)返回一個標識符,唯一的標識新建的窗口,注意,在調(diào)用glutMainLoop()之前,窗口不會被顯示出來。
    顯示回調(diào)函數(shù)
   glutDisplayFunc(void(*func)(void))是最重要的時間回調(diào)函數(shù)。每當GLUT認為需要重新顯示窗口的內(nèi)容時,都將執(zhí)行函數(shù)glutDisplayFunc()函數(shù)注冊的回調(diào)函數(shù),因此,應(yīng)將為重新繪制場景需要調(diào)用的函數(shù)都放到顯示回調(diào)函數(shù)中。如果程序修改了窗口的內(nèi)容,可能需要調(diào)用函數(shù)glutPostRedisplay(void),它提醒函數(shù)glutMainLoop調(diào)用注冊的顯示回調(diào)函數(shù)。
    運行程序
   glutMainLoop(void),顯示創(chuàng)建的所有窗口,被渲染到這些窗口中的內(nèi)容也將顯示出來。程序開始事件處理,這冊的顯示回調(diào)函數(shù)被觸發(fā),進入該循環(huán),便不會退出。
    處理輸入事件
   glutReshapeFunc(void(*func)(int w, int h)),指定窗口大小發(fā)生改變時應(yīng)采取的措施;
   glutKeyboardFunc(void(*func)(unsigned char key, int x, int y))和glutMouseFunc(void(*func)(int button,int state,int x,int y)),指定當特定的鍵和鼠標按鈕被按下或者松開時應(yīng)調(diào)用的回調(diào)函數(shù)。
   glutMotionFunc(void(*func)(int x, int y)),這冊了當用戶按下鼠標按鈕并移動鼠標時應(yīng)調(diào)用的回調(diào)函數(shù)。
    管理后臺處理
   glutIdleFunc(void(*func)(void))指定一個在沒有其他事件需要處理時(如事件循環(huán)空閑)執(zhí)行的函數(shù)。
    繪制三維物體
   glutWireCube(GLdouble size)、glutSolidCube(GLdouble size)、glutWireSphere(GLdouble radius, GLint slices,GLint statcks)、glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)等