版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、圖形設(shè)計基礎(chǔ)學時:48上課時間:星期三7-8節(jié)(Z426) 星期五5-6節(jié)(Z525)單周HPQ:503941104Room:Z323第1章 OpenGL基礎(chǔ)知識掌握圖形學編程的基本概念。了解OpenGL的基本功能與操作。學習圖形系統(tǒng)和模型的基本原理、結(jié)構(gòu)SGI(1)SGI(Silicon Graphics )中文商標:硅圖美國硅圖公司成立于1982年,是一個生產(chǎn)高性能計算機系統(tǒng)的跨國公司,總部設(shè)在美國加州舊金山硅谷MOUNTAIN VIEW的SGI公司是業(yè)界高性能計算系統(tǒng)、復(fù)雜數(shù)據(jù)管理及可視化產(chǎn)品的重要提供商. 它提供世界上最優(yōu)秀的服務(wù)器系列以及具有超級計算能力的可
2、視化工作站。SGI公司是美國Fortune雜志所列美國最大500家公司/生產(chǎn)企業(yè)之一,年產(chǎn)值超過40億美元。近五年公司平均增長率為40-50%,是世界上發(fā)展最快的一家計算機公司。公司在業(yè)界率先集成了RISC技術(shù)、均衡多重處理技術(shù)、數(shù)字化媒體技術(shù)、計算機圖形技術(shù)、UMA及CCNUMA體系結(jié)構(gòu)等計算機領(lǐng)域的核心科技,形成了自己的獨特風格,開創(chuàng)了視算科技及信息處理的新方向。目SGI在超級計算領(lǐng)域更是取得了世界上500臺最大超級計算機中半數(shù)以上的市場份額。超級計算機,g代表圖形工作站,i代表具有突破性的洞察力。采用我們的服務(wù)器,你就擁有非凡的計算能力幫助你解決最為棘手的問題。我們的圖形工作站可以用更形
3、象化的方式觀看、操作和使用數(shù)據(jù)。當你與我們分布在全球范圍的服務(wù)隊伍相結(jié)合時,你就可以獲得所需要的解決方案,實現(xiàn)理想。SGI(2)SGI的創(chuàng)始人James Clark吉姆克拉克博士。在當今的計算機界,SGI 的名字雖不如IBM、HP那樣有名,但其產(chǎn)品和技術(shù)在圖形和高性能計算領(lǐng)域有著其他產(chǎn)品無法替代的地位。SGI公司早期便致力于圖形卡的研究和制造,后來便開始生產(chǎn)自己的圖形工作站產(chǎn)品。 SGI的創(chuàng)始人是吉姆克拉克(James Clark)博士,他出生于美國德州鄉(xiāng)村小鎮(zhèn),中學輟學參軍,靠自學獲得中學同等學力。服完兵役的克拉克考進猶他大學專攻電腦制圖,1978年獲博士學位。四年后,他以自己研制的圖形工作
4、站和三維繪圖軟件創(chuàng)辦SGI,然后快速成長為世界著名的圖形軟硬件制造商。1995年并購著名的動畫軟件公司Alias Wavefront(2004年售出),從而擁有了屬于自己的軟件??纯碨GI的發(fā)展史:1983年,第一批圖形終端推出;1984年,第一批圖形工作站推出,由此可以看出,它對圖形工作站的貢獻有多么巨大。大家所熟悉的玩具總動員、侏羅紀公園、泰坦尼克號、指環(huán)王、緊急迫降等影片均是在SGI的圖形工作站上制作出來的。這里順便說一下,世界電影史上花費最大、最成功的電影之一泰坦尼克號的成功很大程度上得益于它對電腦動畫的大量應(yīng)用,成功模擬了當時悲壯的情景。世界著名的數(shù)字工作室Digital Domai
5、n公司用了一年半的時間,動用了300多臺SGI超級工作站,并派出50多個特技師一天24小時輪流制作泰坦尼克號中的電腦特技。1.1.2 0penCL是三維圖形的開發(fā)標準 20世紀90年代,隨著軟硬件技術(shù)的發(fā)展,三維圖形迅猛發(fā)展。OpenGL通過對圖形庫的進一步發(fā)展,實現(xiàn)了二維和三維的高級技術(shù)。1.1.3 OpenGL的基本功能模型繪制模型觀察顏色模式的指定光照應(yīng)用圖像效果增強位圖和圖像處理紋理映射實時動畫交互技術(shù)1.1.4 0penGL的體系結(jié)構(gòu) 應(yīng)用程序OpenGL窗口系統(tǒng)操作系統(tǒng)圖形硬件Fig 1.1 OPenGL層次應(yīng)用程序Fig 1.2 OPenGL/Windows體系OpenGL32.
6、dllGDI32.dll可安裝的客戶端驅(qū)動程序WinSrv.dll相關(guān)DDIWin32.DDI視頻顯示驅(qū)動程序首先創(chuàng)建工程其步驟如下:1)創(chuàng)建一個Win32 Console Application。2)鏈接OpenGL libraries。在Visual C+中先單擊Project,再單擊Settings,再找到Link單擊,最后在Object/library modules 的最前面加上OpenGL32.lib GLu32.lib GLaux.lib3)單擊Project Settings中的C/C+標簽,將Preprocessor definitions 中的_CONSOLE改為_WIND
7、OWS。最后單擊OK。1.2 OpenGL圖形的實現(xiàn)方式1.2.1 設(shè)備描述表與渲染描述表 OpenGL的繪圖方式與Windows的一般繪圖方式不同,區(qū)別為:Windows采用的是圖形設(shè)備接口GDI繪圖。OpenGL采用的是渲染描述表繪RC圖。OpenGL采用的是特殊的像素格式。在Windows中使用GDI繪圖時必須指定在哪個設(shè)備環(huán)境DC中繪制,同同樣的在使用OpenGL函數(shù)時也必須指定一個所謂的渲染環(huán)境。正如DC要存儲GDI的繪制環(huán)境信息如筆,刷和字體等,RC也必須保存OpenGL所需的渲染信息如像素格式等。 渲染描述表主要由以下6個函數(shù)來管理HGLRC wglCreateContext(
8、HDC hdc )該函數(shù)用來創(chuàng)建一個OpenGL可用的渲染環(huán)境。hdc必須是一個合法的支持至少16位色的屏幕設(shè)備描述表DC或內(nèi)存設(shè)備描述表的句柄。該函數(shù)在調(diào)用前,設(shè)備描述表必須設(shè)置好適當?shù)南袼馗袷?。成功?chuàng)建渲染描述表之后,hdc可以釋放或刪除。函數(shù)返回NULL值表示失敗,否則返回值為渲染上下文的句柄。BOOL wglDeleteContex( HGLRC hglrc )該函數(shù)刪除一個RC,一般應(yīng)用程序在刪除RC之前,應(yīng)使它成為非現(xiàn)行RC,不過,刪除一個現(xiàn)行RC也是可以得。此時,OpenGL系統(tǒng)沖掉等待的繪圖命令并使之成為非現(xiàn)行RC,后刪除之。注意:刪除一個屬于別的線程的RC時會導(dǎo)致失敗。HGL
9、RC wglGetCurrentcontext( void )該函數(shù)返回線程的現(xiàn)行RC,如果線程無現(xiàn)行RC則返回NULLHDC wglGetCurrentDC( void )該函數(shù)返回與線程現(xiàn)行RC關(guān)聯(lián)的DC,如果線程無現(xiàn)行RC則返回NULL。BOOL wglMakeCurrent( HDC hdc, HGLRC hglrc )該函數(shù)把hdc和hglrc關(guān)聯(lián)起來,并使hglrc成為調(diào)用線程的現(xiàn)行RC,如果傳給hglrc的值為NULL,則函數(shù)解除關(guān)聯(lián),并置線程的現(xiàn)行RC為非現(xiàn)行RC,測試忽略hdc參數(shù)。注意:傳給該函數(shù)的hdc可以不是調(diào)用wglCreateContext時使用的值,但是,他們所關(guān)
10、聯(lián)的設(shè)備必須相同并且擁有相同的像素格式。6 BOOL wglUseFontBitmaps(HDC hdc, DWORD dwFirst, DWORD dwCount, DWORD dwBase)該函數(shù)使用hdc的當前字體,創(chuàng)建一系列指定范圍字符的顯示表??梢岳眠@些顯示表在OpenGL窗口畫GDI文本。如果OpenGL窗口是雙緩沖的,那么這是往后緩沖區(qū)中畫GDI文本的唯一途徑。一般地,在使用單個RC的應(yīng)用程序中,在相應(yīng)WM_CREATE消息時創(chuàng)建RC,當WM_CLOSE或WM_DESTROY到來時再刪除它。在使用OpenGL命令往窗口中繪圖之前,必須先建立一個RC,并使之成為現(xiàn)行RC。Open
11、GL命令無需提供RC,它將自動使用現(xiàn)行RC。若無現(xiàn)行RC,OpenGL將簡單地忽略所有的繪圖命令。一個RC是指現(xiàn)行RC,這是針對調(diào)用線程而言的。一個線程在擁有現(xiàn)行RC進行繪圖時,別的線程將無法同時繪圖。一個線程一次只能擁有一個現(xiàn)行RC,但是可以擁有多個RC;一個RC也可以由多個線程共享,但是它每次只能在一個線程中是現(xiàn)行RC。在使用現(xiàn)行RC時,不應(yīng)該釋放或者刪除與之關(guān)聯(lián)的DC。如果應(yīng)用程序在整個生命期內(nèi)保持一個現(xiàn)行RC,則應(yīng)用程序也一直占有一個DC資源。注意,Windows系統(tǒng)只有有限的DC資源。 管理RC與DC兩種方法1、在WM_CREATE消息響應(yīng)時創(chuàng)建RC,創(chuàng)建后立即釋放DC;當WM_PA
12、INT消息到來時,程序再獲取DC句柄,并與RC關(guān)聯(lián)起來,繪圖完成后,立即解除RC與DC得關(guān)聯(lián)并釋放DC;當WM_DESTROY消息到來時,程序只需簡單的刪除RC。2、RC在程序開始時創(chuàng)建并使之成為現(xiàn)行RC。它將保持為現(xiàn)行RC直至程序結(jié)束。相應(yīng)的,GETDC在程序開始調(diào)用,RELEASEDC在程序結(jié)束時才調(diào)用。此中方法的好處是在相應(yīng)WM_PAINT消息時,無需調(diào)用十分耗時的wglMakeCurrent函數(shù)。一般它要消耗幾千個時鐘周期。 Get the DC handle(GetDC)Create the RCRelease the DC handle(ReleaseDC)WM_CREATEGet
13、 the DC handle(GetDC)Make the RC currentDraw with OpenGLMake the RC not CurrentRelease the DC handle(Endpaint)WM_PAINTDelete the RCWM_DESTROY消息循環(huán)Fig1.7 渲染描述表與設(shè)備描述表的管理方法11.2.2 0penGL像素格式設(shè)置 像素格式是OpenGL窗口的重要屬性,它包括是否使用雙緩沖,顏色位數(shù)和類型以及深度位數(shù)等。像素格式可由Windows系統(tǒng)定義的所謂像素格式描述子結(jié)構(gòu)來定義(PIXELFORMATDESCRIPTOR),該結(jié)構(gòu)定義在windo
14、ws.h中。在該結(jié)構(gòu)中包含有26個屬性信息,其形式為: typedef structtagPIXELFORMATDESCRIPTORWORD nSize;該結(jié)構(gòu)所占內(nèi)存空間。WORD nVersion;版本號,當前為1。DWORD dwFlags; PFD_DRAW_TO_BITMAP支持內(nèi)存中繪制位圖PFD_DRAW_TO_WINDOW 支持屏幕繪圖PFD_DOUBLEBUFFER 支持雙緩沖PFD_CENERIC_FORMAT 指定選擇GDI支持的像素格式PFD_NEED_PALETTE 指定需要邏輯調(diào)色板PFD_NEED_SYSTEM_PALETTE 指定需要硬件調(diào)色板PFD_STERE
15、O NT不支持PFD_SUPPORT_OPENGL 支持OpenGLPFD_SUPPORT_GDI 支持GDI,此時不可使用PFD_DOUBLEBUFFERBYTE iPixelType;像素顏色模式,可選項為PFD_TYPE_RGBA或PFD_TYPE_INDEX,分別對應(yīng)于RGBA模式和顏色索引模式。BYTE cColorBits;指定顏色的位數(shù)。BYTE cRedBits;采用RGBA模式時,紅色組分占用位數(shù)BYTE cRedShift;采用RGBA模式時,紅色組分占偏移量BYTE cGreenBits;采用RGBA模式時,綠色組分占用位數(shù)BYTE cGreenShift;采用RGBA模
16、式時,綠色組分偏移量BYTE cBlueBits;BYTE cBlueShift;BYTE cAlphaBits;采用RGBA模式時,Alpha組分占用位數(shù)。BYTE cAlphaShift;采用RGBA模式時,Alpha組分偏移量。BYTE cAccumBits;指定累積緩沖區(qū)表示一個像素所用位數(shù)。BYTE cAccumRedBits;定累積緩沖區(qū)表示紅色組分占用位數(shù)。BYTE cAccumGreenBits;指定累積緩沖區(qū)表示綠色組分占用位數(shù)。BYTE cAccumBlueBits;指定累積緩沖區(qū)表示藍色組分占用位數(shù)。BYTE cAccumAlphaBits;指定累積緩沖區(qū)表示Alpha組
17、分占用位數(shù)BYTE cDepthBits;指定深度緩沖區(qū)表示一個像素所用位數(shù)。BYTE cStencilBits;指定模板緩沖區(qū)表示一個像素所用位數(shù)。BYTE cAuxBuffers;指定輔助緩沖區(qū),Windows9x、NT不支持BYTE iLayerType; Windows9x、NT下只能是PFD_MAIN_PLANE。BYTE bReserved;0DWORD dwLayerMask;指定覆蓋層的屏蔽,Windows9x、NT不支持DWORD dwVisibleMask; Windows9x、NT不支持DWORD dwDamageMask; Windows9x、NT不支持 PIXELFO
18、RMATDESCRIPTOR;Fig 1.9 設(shè)置像素格式的一般步驟期望的像素格式描述PixelFormatDescriptor枚舉或比較像素格式ChoosePixelFormatDescribePixelFormat設(shè)置像素格式匹配YesNo1.2.3 0penCL圖形處理流程 整個OpenGL的基本工作流程如下圖:1.2.4 0penCL圖形繪制方式 OpenGL是一個與硬件圖形發(fā)生器的軟件接口,它包括了100多個圖形操作函數(shù),開發(fā)者可以利用這些函數(shù)來構(gòu)造景物模型、進行三維圖形交互軟件的開 發(fā)。正如上一章所述,OpenGL是一個高性能的圖形開發(fā)軟件包。OpenGL支持網(wǎng)絡(luò),在網(wǎng)絡(luò)系統(tǒng)中用戶
19、可以在不同的圖形終端上運行程序顯示圖形。 OpenGL作為一個與硬件獨立的圖形接口,它不提供與硬件密切相關(guān)的設(shè)備操作函數(shù),同時,它也不提供描述類似于飛機、汽車、分子形狀等復(fù)雜形體的圖形操 作函數(shù)。用戶必須從點、線、面等最基本的圖形單元開始構(gòu)造自己的三維模型。當然,象OpenInventor那樣更高一級的基于OpenGL的三維圖形建 模開發(fā)軟件包將提供方便的工具。因此OpenGL的圖形操作函數(shù)十分基本、靈活。例如OpenGL中的模型繪制過程就多種多樣,內(nèi)容十分豐 富,OpenGL提供了以下的對三維物體的繪制方式:網(wǎng)格線繪圖方式(wireframe)這種方式僅繪制三維物體的網(wǎng)格輪廓線。深度優(yōu)先網(wǎng)格
20、線繪圖方式(depth_cued)用網(wǎng)格線方式繪圖,增加模擬人眼看物體一樣,遠處的物體比近處的物體要暗些。反走樣網(wǎng)格線繪圖方式(antialiased)用網(wǎng)格線方式繪圖,繪圖時采用反走樣技術(shù)以減少圖形線條的參差不齊。平面消隱繪圖方式(flat_shade)對模型的隱藏面進行消隱,對模型的平面單元按光照程度進行著色但不進行光滑處理。光滑消隱繪圖方式(smooth_shade)對模型進行消隱按光照渲染著色的過程中再進行光滑處理,這種方式更接近于現(xiàn)實。加陰影和紋理的繪圖方式(shadows、textures)在模型表面貼上紋理甚至于加上光照陰影,使得三維景觀象照片一樣。運動模糊的繪圖方式(motio
21、n-blured)模擬物體運動時人眼觀察所感覺的動感現(xiàn)象。大氣環(huán)境效果(atmosphere-effects)在三維景觀中加入如霧等大氣環(huán)境效果,使人身臨其境。深度域效果(depth-of-effects)類似于照相機鏡頭效果,模型在聚焦點處清晰,反之則模糊。這些三維物體繪圖和特殊效果處理方式,說明OpenGL已經(jīng)能夠模擬比較復(fù)雜的三維物體或自然景觀,這就是我們所面對的OpenGL。1.2.5 0penGL程序運行方式 運行OpenGL程序主要有以下三種方式:OpenGL硬件加速方式三維圖形加速模式純軟件模式OpenGL 函數(shù)庫相關(guān)的API有核心庫(gl)、實用庫(glu)、輔助庫(aux)、
22、實用工具庫(glut)、窗口庫(glx、agl、wgl)和擴展函數(shù)庫等。 從圖1可以看出,gl是核心,glu是對gl的部分封裝。glx、agl、wgl 是針對不同窗口系統(tǒng)的函數(shù)。glut是為跨平臺的OpenGL程序的工具包,比aux功能強大。擴展函數(shù)庫是硬件廠商為實現(xiàn)硬件更新利用OpenGL的擴 展機制開發(fā)的函數(shù)。 1.3.1 開發(fā)庫的組成 開發(fā)基于OpenGL的應(yīng)用程序,必須先了解OpenGL的庫函數(shù)。它采用C語言風格,提供大量的函數(shù)來進行圖形的處理和顯示。OpenGL圖形庫一共有100多個函數(shù),它們分別屬于OpenGL的基本庫、實用庫、輔助庫等不同的庫。 OpenGL 全稱開放式圖形庫,是
23、由SGI公司開發(fā)的低層三維圖形API,目前在圖形開發(fā)領(lǐng)域已經(jīng)成為工業(yè)標準?,F(xiàn)今市面上關(guān)于OpenGL方面的書籍不在少數(shù),但是大多是講解句法和實例,缺乏對其整個程序開發(fā)框架的總結(jié)與把握,所以總體上顯得比較凌亂。本篇文章主要針對初學者(最好要有圖形方面的基礎(chǔ)知識)而制作的,旨在通過對OpenGL 的整個知識結(jié)構(gòu)的介紹,來具體剖析其內(nèi)在運行機制,并且結(jié)合實際開發(fā)經(jīng)驗總結(jié)出在VC平臺下的OpenGL開發(fā)框架,最后給出一個例程來說明這一框架的具體應(yīng)用。 1.OpenGL核心庫OpenGL是一種開放式的圖形軟件開發(fā)包,它采用C語言風格,提供大量的函數(shù)來進行圖形方面的處理,一般編程使用的函數(shù)庫包括:Open
24、GL圖形庫-函數(shù)以gl開頭,可以實現(xiàn)比較簡單的繪制功能,核心函數(shù)共115個。這些函數(shù)可以運行在現(xiàn)在任何主流操作系統(tǒng)中。OpenGL實用庫-函數(shù)以glu開頭,其函數(shù)功能更高級一些,如繪制復(fù)雜的曲線曲面、高級坐標變換、多邊形分割等,共有43個。這些函數(shù)可以運行在現(xiàn)在任何主流操作系統(tǒng)中。OpenGL輔助庫-函數(shù)以aux開頭,它們是一些特殊的函數(shù),包括簡單的窗口管理、輸入事件處理、某些復(fù)雜三維物體繪制等函數(shù),共有31個。它只能在Win32平臺下運行。 核心庫包含的函數(shù)有115個,它們是最基本的函數(shù),其前綴是gl;這部分函數(shù)用于常規(guī)的、核心的圖形處理,由gl.dll來負責解釋執(zhí)行。核心庫中的函數(shù)可以進一
25、步分為以下幾類函數(shù)。 1)繪制基本幾何圖元的函數(shù)。 glBegain()、glEnd()、glNormal*()、glVertex*()。(2)矩陣操作、幾何變換和投影變換的函數(shù)。矩陣入棧函數(shù)glPushMatrix(),矩陣出棧函數(shù)glPopMatrix(),裝載矩陣函數(shù)glLoadMatrix(),矩陣相乘函數(shù)glMultMatrix(),當前矩陣函數(shù) glMatrixMode()和矩陣標準化函數(shù)glLoadIdentity(),幾何變換函數(shù)glTranslate*()、glRotate*()和glScale*(),投影變換函數(shù)glOrtho()、glFrustum()和視口變換函數(shù)glV
26、iewport()等等。(3)顏色、光照和材質(zhì)的函數(shù)。如設(shè)置顏色模式函數(shù)glColor*()、glIndex*(),設(shè)置光照效果的函數(shù)glLight*() 、glLightModel*()和設(shè)置材質(zhì)效果函數(shù)glMaterial()等等。(4)顯示列表函數(shù)。主要有創(chuàng)建、結(jié)束、生成、刪除和調(diào)用顯示列表的函數(shù)glNewList()、 glEndList()、glGenLists()、glCallList()和glDeleteLists()等。(5)紋理映射函數(shù)。主要有一維紋理函數(shù)glTexImage1D()、二維紋理函數(shù)glTexImage2D()、 設(shè)置紋理參數(shù)、紋理環(huán)境和紋理坐標的函數(shù)glTex
27、Parameter*()、glTexEnv*()和glTetCoord*()等。(6)特殊效果函數(shù)。融合函數(shù)glBlendFunc()、反走樣函數(shù)glHint()和霧化效果glFog*()。(7)光柵化、象素操作函數(shù)。像素位置glRasterPos*()、線型寬度glLineWidth()、多邊形繪制模式glPolygonMode(),讀取象素glReadPixel()、復(fù)制象素glCopyPixel()等。(8)選擇與反饋函數(shù)。主要有渲染模式glRenderMode()、選擇緩沖區(qū)glSelectBuffer()和反饋緩沖區(qū)glFeedbackBuffer()等。(9)曲線與曲面的繪制函數(shù)。
28、生成曲線或曲面的函數(shù)glMap*()、glMapGrid*(),求值器的函數(shù)glEvalCoord*() glEvalMesh*()。(10)狀態(tài)設(shè)置與查詢函數(shù)。主要有g(shù)lGet*()、glEnable()、glGetError()等。2.OpenGL實用庫(OpenGL utility library,GLU),包含的函數(shù)功能更高一些,如繪制復(fù)雜的曲線曲面、高級坐標變換、多邊形分割等,共有43個,前綴為glu。Glu函數(shù)通過調(diào)用核心庫的函數(shù),為開發(fā)者提供相對簡單的用法,實現(xiàn)一些較為復(fù)雜的操作。此類函數(shù)由glu.dll來負責解釋執(zhí)行。主要包括了以下幾種: (1)輔助紋理貼圖函數(shù)。有g(shù)luSca
29、leImage() 、gluBuild1Dmipmaps()、gluBuild2Dmipmaps()等。(2)坐標轉(zhuǎn)換和投影變換函數(shù)。定義投影方式函數(shù)gluPerspective()、gluOrtho2D() 、gluLookAt(),拾取投影視景體函數(shù)gluPickMatrix(),投影矩陣計算gluProject()和 gluUnProject()等。(3)多邊形鑲嵌工具。有g(shù)luNewTess()、 gluDeleteTess()、gluTessCallback()、gluBeginPolygon() gluTessVertex()、gluNextContour()、gluEndPoly
30、gon()等。(4)二次曲面繪制工具。主要有繪制球面、錐面、柱面、圓環(huán)面gluNewQuadric()、gluSphere()、gluCylinder()、gluDisk()、gluPartialDisk()、gluDeleteQuadric()等等。(5)非均勻有理B樣條繪制工具。主要用來定義和繪制Nurbs曲線和曲面,包括gluNewNurbsRenderer()、gluNurbsCurve()、gluBeginSurface()、gluEndSurface()、gluBeginCurve()、gluNurbsProperty()等函數(shù)。(6)錯誤反饋工具。 獲取出錯信息的字符串gluEr
31、rorString()等。3. OpenGL輔助庫OpenGL輔助庫(OpenGL auxiliarylibrary,GLAUX),包括簡單的窗口管理、輸入事件處理、某些復(fù)雜三維物體繪制等函數(shù),共有31個,前綴為aux。此類函數(shù)由glaux.dll來負責解釋執(zhí)行。輔助庫函數(shù)主要包括以下幾類。 (1)窗口初始化和退出函數(shù)。auxInitDisplayMode()和auxInitPosition()。(2)窗口處理和時間輸入函數(shù)。auxReshapeFunc()、auxKeyFunc()和auxMouseFunc()。(3)顏色索引裝入函數(shù)。auxSetOneColor()。(4)三維物體繪制函數(shù)
32、。包括了兩種形式網(wǎng)狀體和實心體,如繪制立方體auxWireCube()和 auxSolidCube()。這里以網(wǎng)狀體為例,長方體auxWireBox()、環(huán)形圓紋面auxWireTorus()、圓柱auxWireCylinder()、二十面體auxWireIcosahedron()、八面體auxWireOctahedron()、四面體auxWireTetrahedron()、十二面體auxWireDodecahedron()、圓錐體auxWireCone()和茶壺auxWireTeapot()。繪制實心體只要將上述函數(shù)中的確Wire更換成Solid就可以了。(5)其他。背景過程管理函數(shù)auxI
33、dleFunc();程序運行函數(shù)auxMainLoop()。(6)程序運行函數(shù)auxMainLoop () 。4、OpenGL工具庫(OpenGL Utility Toolkit)包含大約30多個函數(shù),函數(shù)名前綴為glut,此函數(shù)由glut.dll來負責解釋執(zhí)行。這部分函數(shù)主要包括:(1)窗口操作函數(shù)窗口初始化、窗口大小、窗口位置等函數(shù)glutInit() glutInitDisplayMode()、glutInitWindowSize() glutInitWindowPosition()等。(2)回調(diào)函數(shù)。響應(yīng)刷新消息、鍵盤消息、鼠標消息、定時器函數(shù)等,glutDisplayFunc()、g
34、lutPostRedisplay()、 glutReshapeFunc()、glutTimerFunc()、glutKeyboardFunc()、 glutMouseFunc()。(3)創(chuàng)建復(fù)雜的三維物體。這些和aux庫的函數(shù)功能相同。創(chuàng)建網(wǎng)狀體和實心體。如glutSolidSphere()、glutWireSphere()等。(4)菜單函數(shù)創(chuàng)建添加菜單的函數(shù)glutCreateMenu()、glutSetMenu()、glutAddMenuEntry()、glutAddSubMenu() 和glutAttachMenu()。(5)程序運行函數(shù)。glutMainLoop()。5.Windows
35、專用庫16個WGL函數(shù),專門用于OpenGL和Windows窗口系統(tǒng)的聯(lián)接,其前綴為wgl,主要用于創(chuàng)建和選擇圖形操作描述表(renderingcontexts)以及在窗口內(nèi)任一位置顯示字符位圖。這類函數(shù)主要包括以下幾類(1)繪圖上下文相關(guān)函數(shù)。wglCreateContext()、wglDeleteContext()、wglGetCurrentContent()、wglGetCurrentDC() wglDeleteContent()等。(2)文字和文本處理函數(shù)。wglUseFontBitmaps()、wglUseFontOutlines()。(3)覆蓋層、地層和主平面層處理函數(shù)。wglCo
36、pyContext()、wglCreateLayerPlane()、 wglDescribeLayerPlane()、wglReakizeLayerPlatte()等。(4)其他函數(shù)。wglShareLists()、wglGetProcAddress()等。6、 Win32 API函數(shù)庫包含有6個函數(shù),函數(shù)名無專用前綴。是win32擴展函數(shù)。這部分函數(shù)主要用于處理像素存儲格式和雙幀緩存。這6個函數(shù)將替換Windows GDI中原有的同樣的函數(shù)。Win32API函數(shù)庫只能用于Windows 95/98/NT環(huán)境中。 7、X窗口專用庫是針對Unix和Linux的擴展函數(shù)。包括渲染上下文、繪制圖元、
37、顯示列表、紋理貼圖、等等初始化 glXQueryExtension()渲染上下文函數(shù), glXCreateContext() glXDestroyContext() glXCopyContext() glXMakeCurrent() glXCreateGLXPixmap()執(zhí)行 glXWaitGL()、glXWaitX()緩沖區(qū)和字體 glXSwapBuffers()、glXUseXFont()8 其他擴展庫這 些函數(shù)可能是新的OpenGL函數(shù),并沒有在標準OpenGL庫中實現(xiàn),或者它們是用來擴展已存在的OpenGL函數(shù)的功能。和glu、glx和wgl一 樣,這些OpenGL擴展是由硬件廠商和
38、廠商組織開發(fā)的。OpenGL擴展(OpenGL Extention)包含了大量的擴展API函數(shù)。隨 著硬件的更新,硬件廠商首先向SGI申請登記新的擴展,編寫規(guī)格說明書(specification)。然后按照說明書進行開發(fā)擴展程序。不同的 OpenGL實現(xiàn)(OpenGL Implementation)支持的擴展可能不一樣,只有隨著某一擴展的推廣與應(yīng)用以及硬件技術(shù)的提高該擴展才會在所有的OpenGL實現(xiàn)中被給予支 持,從而最終成為OpenGL標準庫的一部分。擴展由SGI維護,在SGI網(wǎng)站上列出了目前公開的已注冊的擴展及其官方說明書。擴展源由擴展函數(shù)的后綴來指明(或使用擴展常量后綴)。例如,后綴WI
39、N表明一個符合Windows規(guī)范的擴展,EXT或ARB后綴表明該擴展由多個賣主定義。1.3.2 基本數(shù)據(jù)類型 與C語言相對應(yīng),OpenGL中也有整數(shù)、字節(jié)、浮點數(shù)等數(shù)據(jù)類型,為了說明兩者的對應(yīng)關(guān)系,下表將OpenGL的數(shù)據(jù)類型與相應(yīng)的C類型進行了對比:前綴 數(shù)據(jù)類型 相應(yīng)C語言類型 OpenGL類型b 8-bit integer signed char GLbytes 16-bit integer short GLshorti 32-bit integer long GLint,GLsizeif 32-bit floating-point float GLfloat,GLclampfd 64-
40、bit floating-point double GLdouble,GLclampdub 8-bit unsigned integer unsigned char GLubyte,GLbooleanus 16-bit unsigned integer unsigned short GLushortui 32-bit unsigned integer unsigned long GLuint,GLenum,GLbitfield此外,OpenGL也定義GLvoid類型,如果用C語言編寫,可以用它替代void類型。1.3.3 0penGL庫函數(shù)命名規(guī)則 了解了OpenGL的數(shù)據(jù)類型,讓我們再回過頭
41、來看看OpenGL庫函數(shù)的命名規(guī)律。所有OpenGL函數(shù)采用了以下格式:庫前綴有g(shù)l、glu、aux、glut、wgl、glx等等,分別表示該函數(shù)屬于OpenGL某開發(fā)庫等,從函數(shù)名后面中還可以看出需要多少個參數(shù)以及參數(shù)的類型。I代表int型,f代表float型,d代表double型,u代表無符號整型。注意,有的函數(shù)參數(shù)類型后綴前帶有數(shù)字2、3、4。2代表二維,3代表三維,4代表alpha值(以后介紹)。有些OpenGL函數(shù)最后帶一個字母v,表示函數(shù)參數(shù)可用一個指針指向一個向量(或數(shù)組)來替代一系列單個參數(shù)值。下面兩種格式都表示設(shè)置當前顏色為紅色,二者等價。glColor3f(1.0,0.0,0.0);等價于:float color_array=1.0,0.0,0.0;glColor3fv(color_array);除了以上基本命名方式外,還有一種帶*星號的表示方法,例如glColor*(),它表示可以用函數(shù)的各種方式來設(shè)置當前顏色。同理,glVertex*v()表示用一個指針指向所有類型的向量來定義一系列頂點坐標值。1.4 基于OpenGL的高層圖形庫 略1.5 OpenGL應(yīng)用程序框架 Win32控制臺程序框架(1)創(chuàng)建一個新工程(2)設(shè)置包含文件和庫文件路徑(3)加入OpenGL庫P25 Program/P25#include #include #includ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026河北保定易縣公安局招聘警務(wù)輔助人員4名備考考試試題及答案解析
- 2026廣東中山大涌鎮(zhèn)起鳳環(huán)社區(qū)居民委員會公益性崗位招聘2人備考考試題庫及答案解析
- 2026江西省弋投建設(shè)(集團)有限公司社會招聘2人筆試備考試題及答案解析
- 2026貴州黔東南州三穗縣第二批城鎮(zhèn)公益性崗位招聘21人備考考試題庫及答案解析
- 文庫發(fā)布:飛利浦介紹
- 2026福建廈門海隆對外勞務(wù)合作有限公司系統(tǒng)內(nèi)選聘1人備考考試題庫及答案解析
- 2026上半年云南事業(yè)單位聯(lián)考殘疾人聯(lián)合會直屬事業(yè)單位公開招聘人員備考考試題庫及答案解析
- 2026上半年黑龍江伊春市事業(yè)單位招聘262人備考考試試題及答案解析
- 2026湖南農(nóng)業(yè)發(fā)展投資集團有限責任公司招聘3人備考考試試題及答案解析
- 2026年臨沂市市直部分醫(yī)療衛(wèi)生事業(yè)單位公開招聘醫(yī)療后勤崗位工作人員(9人)備考考試題庫及答案解析
- 體系工程師工作年終總結(jié)
- 五年級上冊小數(shù)四則混合運算100道及答案
- 3D小人素材13(共16)-金色系列
- 上腔靜脈綜合征患者的護理專家講座
- 免責協(xié)議告知函
- 食物與情緒-營養(yǎng)對心理健康的影響
- 2023氣管插管意外拔管的不良事件分析及改進措施
- 麻醉藥品、精神藥品月檢查記錄
- 基礎(chǔ)化學(本科)PPT完整全套教學課件
- 蕉嶺縣幅地質(zhì)圖說明書
- 電梯控制系統(tǒng)論文
評論
0/150
提交評論