資源描述:
《linux下的opengl編程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、Linux下的OpenGL編程 OpenGL是一個(gè)工業(yè)標(biāo)準(zhǔn)的三維計(jì)算機(jī)圖形軟件接口,它由SGI公司發(fā)布并廣泛應(yīng)用于Unix、OS/2、Windows/NT等多種平臺(tái),當(dāng)然也包括Linux。在Windows/NT平臺(tái)上,一般的開發(fā)工具如VC、BC、FortranPowerstation等都支持直接的OpenGL應(yīng)用的開發(fā);在商用Unix平臺(tái)上,Motif同樣很好的支持OpenGL(畢竟OpenGL最初是工作站上的東西);那么在Linux上呢? 本文不著力于OpenGL編程的方法和技巧,而是把重點(diǎn)放在如何在Linux平臺(tái)上開發(fā)
2、OpenGL程序。介紹支持OpenGL的幾個(gè)工具包,并輔以詳細(xì)的實(shí)例來(lái)闡述。1.Linux下OpenGL編程環(huán)境簡(jiǎn)介 OpenGL不是自由軟件,它的版權(quán)、商標(biāo)(OpenGL這個(gè)名字)都?xì)wSGI公司所有。但在Linux下有OpenGL的取代產(chǎn)品:Mesa。Mesa提供和OpenGL幾乎完全一致的接口,對(duì)利用OpenGLAPI編程的人來(lái)說,幾乎感覺不到任何差異。Mesa是遵循GPL協(xié)議(部分遵循LGPL協(xié)議)的自由軟件,而且,正是由于Mesa的自由性,它在對(duì)新硬件的支持度等方面都超過了OpenGL。Mesa可以從www.mesa3d
3、.org取得。得到Mesa后,依照說明即可生成編寫程序所需要的動(dòng)態(tài)、靜態(tài)連接庫(kù)和頭文件?! ×私釵penGL的讀者都知道,OpenGL本身只提供三維圖形接口,不具備繪制窗口、接受響應(yīng)、處理消息等功能。這些功能必須由第三方的開發(fā)環(huán)境提供,如上面提及的VC等等。有人會(huì)想,既然在Motif下可以開發(fā)OpenGL程序,那么,使用Linux下的Lesstif也應(yīng)該可以。是的,的確可以,但不幸的是,Linux下的Lesstif是一個(gè)很不成熟的產(chǎn)品,而且也不具有可移植性,所以應(yīng)用Lesstif開發(fā)的人很少。下面我們簡(jiǎn)單介紹幾個(gè)常用的工具包。
4、在Linux下開發(fā)OpenGL程序,最常用的工具是GLUT(TheOpenGLUtilityToolkit)。它可以創(chuàng)建一個(gè)或多個(gè)OpenGL窗口,響應(yīng)、處理用戶的交互操作、簡(jiǎn)單的彈出式菜單以及一些內(nèi)置的繪圖和字體處理功能。GLUT和OpenGL一樣,可以移植于多種平臺(tái)。由于它良好的表現(xiàn),現(xiàn)在它已經(jīng)成為Mesa發(fā)布的標(biāo)準(zhǔn)套件之一?! ×硪粋€(gè)很好的開發(fā)工具包是FLTK(FastLightToolKit),這是一個(gè)用C++編寫的圖形界面開發(fā)工具。和GTK++、KDE不同,它只關(guān)注于圖形界面的設(shè)計(jì),而盡量不牽涉其他的實(shí)際應(yīng)用。這個(gè)特點(diǎn)使
5、得它比其他許多開發(fā)工具簡(jiǎn)練和高效。而且,它同樣也是一個(gè)具有良好移植性的開發(fā)工具。事實(shí)上,它現(xiàn)在正引來(lái)越來(lái)越多人的興趣,許多商業(yè)軟件(尤其是致力于開發(fā)嵌入式桌面系統(tǒng)的軟件)都選用了它作為圖形界面的開發(fā)工具。關(guān)于它的詳細(xì)情況參見作者的另一篇文章《FLTK---一個(gè)優(yōu)秀的圖形界面開發(fā)工具包》。在FLTK里有一個(gè)組件:Fl_Gl_Window是專門的OpenGL窗口,利用它開發(fā)OpenGL程序相當(dāng)方便?! ∽詈笠岬氖荊TK和KDE,它們是目前在Linux下用的最多的開發(fā)工具。GTK本身并不直接支持OpenGL(新的版本是否支持,尚不太清
6、楚),但有人開發(fā)了支持OpenGL的Widget,叫做GLAREA,需要的讀者可以到網(wǎng)上去查找或者與本文作者聯(lián)系。KDE提供了對(duì)OpenGL的支持,但它的缺陷之一是KDE只運(yùn)行于Linux系統(tǒng),不具有可移植性。在這里,我將主要向大家介紹前面兩個(gè)工具包。2.用GLUT開發(fā)OpenGL程序?2.1如何獲得 GLUT可以從Mesa中獲得,讀者也可以直接到它的主頁(yè)去下載它: http://reality.sgi.com/employees/mjk_asd/glut3/glut3.html。按照說
7、明安裝后在OpenGL的頭文件GL目錄下將會(huì)有GLUT的頭文件glut.h,同時(shí)安裝的還有庫(kù)文件libglut.a或libglut.so。有了它們以后,就可以用GLUT來(lái)編程了。2.2一個(gè)簡(jiǎn)單的例子下面,我們先看一個(gè)簡(jiǎn)單的例子。這個(gè)例子畫一個(gè)立體的球。/*light.c此程序利用GLUT繪制一個(gè)OpenGL窗口,并顯示一個(gè)加以光照的球。*//*由于頭文件glut.h中已經(jīng)包含了頭文件gl.h和glu.h,所以只需要include此文件*/#include#include/*初始化材料屬性、
8、光源屬性、光照模型,打開深度緩沖區(qū)*/voidinit(void){GLfloatmat_specular[]={1.0,1.0,1.0,1.0};GLfloatmat_shininess[]={50.0};GLfloatlight_positio