王繼東等
王繼東龐明勇李建生
摘要:介紹了GLUT的設計原理和功能,闡述了基于GLUT構(gòu)建OpenGL應用程序框架的步驟。并給出一個具體的應用程序?qū)嵗?/p>
關(guān)鍵詞:GLUTOpenGL應用程序框架
1GLUT設計原理與功能
GLUT是用ANSI C和FORTRAN語言實現(xiàn)的一個編程接口,其API是獨立于窗口系統(tǒng)的,所以它不返回任何活動的窗口句柄、指針及其他數(shù)據(jù)結(jié)構(gòu)。GLUT簡化了應用OpennGL渲染的過程,通過GLUT的API只需簡單的幾步就能為OpenGL創(chuàng)建一個可供渲染的窗口。它的設計和OpennGL一樣也是基于狀態(tài)機的,當前窗口和當前菜單是GLUT兩個最重要的狀態(tài),OpenGL中的函數(shù)一般只作用于這些狀態(tài)綁定的窗口。根據(jù)簡單應用程序的一般要求,GLUT合理地預定義了大部分的初始狀態(tài),從而簡化了狀態(tài)設置過程。
GLUT提供的功能包括多窗口OpenGL渲染、回調(diào)模式驅(qū)動的程序執(zhí)行方式、完整的輸入設備、提供系統(tǒng)閑置時調(diào)用的idle函數(shù)、提供彈出式菜單、提供常用的線框和實體模型的繪制、支持圖像/圖形字體的繪制、其它的窗口管理功能(包括管理重疊層)等,這些功能基本滿足了OpenGL圖形應用程序開發(fā)的需要。
2基于GLUT構(gòu)建OpenGL應用程序框架的方法
基于GLUT構(gòu)建OpenGL的應用程序框架可以按照以下幾個步驟進行:
(1)初始化和創(chuàng)建窗口。在任何GLUT子程序之前,應首先調(diào)用能夠處理命令行選項的gutlnit()函數(shù)對GLUT庫進行初始化,然后,再調(diào)用glutInitDisplayMode()、glu-tlnitWindowSize()、glutInitWindowPosition()對窗口的顯示模式、大小以及窗口在屏幕中的位置進行設置,最后,調(diào)用gutCreateWindow()函數(shù)創(chuàng)建新窗口;(2)設置OoenGL初始狀態(tài)。一般在窗口創(chuàng)建成功后,我們將要對OpenGL初始狀態(tài)進行設置。如使用glColor*()函數(shù)設置當前顏色,使用glLingIlt*()函數(shù)設置光源屬性,使用gIBlendFunc()函數(shù)設置混合操作,使用glEnable()和glDisable()函數(shù)激活和關(guān)閉各種狀態(tài)開關(guān)等;(3)注冊回調(diào)函數(shù)。在程序進入主循環(huán)之前,應對回調(diào)函數(shù)進行0注冊。常用的注冊回調(diào)函數(shù)有:glutDisplayFunc()函數(shù)、glutReshapeFunc()函數(shù)、glutKeyboardFunc()函數(shù)、glutSpecialFunc()函數(shù)、glutInit()函數(shù)。(4)進入GLUT事件處理循環(huán)。在完成前面所有設置后,就可以通過glutMainLoop()函數(shù)進入GLUT事件處理循環(huán)。當某事件被激活,應用程序?qū)⒄{(diào)用相應的已注冊回調(diào)函數(shù)實現(xiàn)特定的功能,如窗口重繪、鍵盤交互、鼠標交互等。
3應用程序?qū)嵗?/p>
在Windows2000和VC6.0環(huán)境下,建立一個基于GLUT的簡單OpenGL程序?qū)嵗嵗饕抢L制一個半透明紋理的正方體,并可以使用鍵盤上的Home鍵和方向鍵控制正方體旋轉(zhuǎn)。
3.1 Include文件及程序庫鏈接設置
把glut.h、glut32.1ib文件復制到VC6.0程序文件夾下的子文件夾中(glut.h復制到Microsoft Visual Stu-dioVC98IncludeGL,glut32.1ib復制到Microsoft VisualStudioVC98Lib),把glut32.dll復制到操作系統(tǒng)所在文件夾的子文件夾中(一般為WlNNTsystem32)。
打開VC6.0建立一個空的Win32控制臺程序并新建一個C++源文件。在C++源文件的開始處,除了包含其他必要頭文件以外還必須包含GLUT頭文件,代碼為:#in-elude
程序庫的鏈接可以通過VC6.0的菜單選項“Project->settings”設置,不過這里我們使用更加靈活方便的命令行完成,這樣在Debug模式與Release模式之間切換時就不會出錯。代碼如下:

3.2程序主函數(shù)的編寫
基于GLUT的OpenGL應用程序框架主要在main()函數(shù)中構(gòu)建,代碼如下:

3.3 OpenGL繪制與交互
4結(jié)束語
開發(fā)者使用GLUT能夠在不考慮開發(fā)平臺的基礎上直接進行OpenGL圖形開發(fā),提高了應用程序的開發(fā)效率降低了開發(fā)的門檻。