GraphicsLibrary三維圖形軟件包_第1頁
GraphicsLibrary三維圖形軟件包_第2頁
GraphicsLibrary三維圖形軟件包_第3頁
GraphicsLibrary三維圖形軟件包_第4頁
GraphicsLibrary三維圖形軟件包_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Graphics Library 三維圖形軟件包與DirectX的區(qū)別OpenGL只是圖形函數(shù)庫。DirectX包含圖形,聲音,輸入,網(wǎng)絡(luò)等模塊。OpenGL穩(wěn)定,可跨平臺使用。DirectX僅能用于Windows系列平臺,包括Windows Mobile/CE系列以及XBOX/XBOX360。-1995年至1996年,微軟實行了一項新計劃,以支持在Windows95上運行游戲,目標(biāo)是把市場擴展到被任天堂和世嘉控制的游戲領(lǐng)域。然而,微軟不想用已經(jīng)在NT上提供的OpenGL技術(shù)。微軟收購了Rendermorphics,Ltd.并得到他的被稱作RealityLab的3D API。經(jīng)重新整理,微軟發(fā)

2、布了新的3D API-Direct3D。微軟,推行Direct3D,凍結(jié)OpenGL!微軟當(dāng)時拒絕了在Window95上支持OpenGL。不止如此,微軟采取異常手段收回對OpenGL的MCD驅(qū)動接口的支持,以致硬件廠商不得不放棄已經(jīng)進(jìn)入最后測試的OpenGL驅(qū)動。微軟的市場部門開始向游戲開發(fā)商、硬件廠商、新聞出版機構(gòu)推銷Direct3D,同時排斥OpenGL。API之戰(zhàn)!Silicon Graphics和很多OpenGL用戶都依賴OpenGL創(chuàng)新且高性能的技術(shù)。但很明顯微軟打算用Direct3D代替OpenGL,盡管D3D有很多問題而且不能像OpenGL那樣被硬件廠商擴展。Silicon Gr

3、aphics決定在1996 SIGGRAPH會議上作一項演示。演示證明OpenGL至少和D3D一樣快,從而駁倒微軟的市場論調(diào)。因為OpenGL是業(yè)界公認(rèn)標(biāo)準(zhǔn),比D3D功能豐富,而且圖像質(zhì)量要高一些,所以演示在計算機圖形和游戲開發(fā)社區(qū)導(dǎo)致了激烈論戰(zhàn)。游戲開發(fā)者要求OpenGL和D3D站在同等地位!當(dāng)技術(shù)和市場問題暴露,強烈的支持OpenGL行動開始了。Doom的開發(fā)者John Carmack聲明拒絕D3D,Chris Hecker在游戲開發(fā)雜志上發(fā)表了兩套API的全面分析,以微軟應(yīng)放棄D3D為結(jié)論。游戲開發(fā)者先后兩次向微軟遞交請愿書。第一次由56名首席游戲開發(fā)者要求微軟發(fā)行OpenGL MCD驅(qū)

4、動,但未成功,因為會讓OpenGL與D3D競爭。第二次的公開信由254人簽名開始,截止時達(dá)到1400人。微軟的回答仍是重申舊市場立場。盡管請愿者清楚的要求兩套API同等競爭以促進(jìn)發(fā)展,微軟卻以增加D3D的投資、更加減少OpenGL的投資為回應(yīng)。Fahrenheit-D3D與OpenGL的合并?Silicon Graphics,Microsoft,HP,Intel達(dá)成協(xié)議聯(lián)合開發(fā)下一代3D API-Fahrenheit。但不了了之,因為微軟的打算是把OpenGL的技術(shù)用到D3D里并且以此之名驅(qū)除OpenGL的威脅。(估計DirectX 8Graphics即是剩下微軟獨自開發(fā)的Fahrenheit

5、,吸收了OpenGL的很多東西。)OpenGL豪氣不減當(dāng)年!OpenGL依然是唯一能與微軟單獨控制的D3D對立的API,盡管Silicon Graphics不再以任何微軟不能接受的方式推行OpenGL。游戲開發(fā)這是獨立的,并且很多關(guān)鍵人物在用OpenGL,因此,硬件廠商正努力提高對其支持。D3D仍不能支持高端圖像和專業(yè)應(yīng)用,而OpenGL主宰著這些土地。在開放原碼社區(qū),Mesa項目正提供獨立于微軟的OpenGL驅(qū)動。譯者注:表面上好像D3D比OpenGL支持更多的功能,其實由于D3D不支持硬件擴展,如硬件全景陰影,硬件渲染順序無關(guān)半透明材質(zhì)等新技術(shù)根本無法使用,而D3D(特指D3D8)本身提供

6、的功能只有一小部分能在使用HAL且硬件不支持時模擬,你要用大量代碼分析硬件能力和采取不同策略O(shè)penGL三維圖形標(biāo)準(zhǔn)是由AT&T公司UNIX軟件實驗室、IBM、DEC、SUN、HP、Microsoft和SGI等多家公司在GL圖形庫標(biāo)準(zhǔn)的基礎(chǔ)上聯(lián)合推出的開放式圖形庫,它使在微機上實現(xiàn)三維真實感圖形的生成與顯示成為可能。由于OpenGL是開放的圖形標(biāo)準(zhǔn),用戶原先在UNIX下開發(fā)的OpenGL圖形軟件很容易移植到微機上的WindowsNT/95上。筆者在VisualC+4.1(以下簡稱VC)集成環(huán)境下,開發(fā)了基于OpenGL的三維真實感圖形應(yīng)用程序,現(xiàn)介紹如下。微機上的OpenGL開發(fā)環(huán)境基于Ope

7、nGL標(biāo)準(zhǔn)開發(fā)的應(yīng)用程序必須運行于32位Windows平臺下,如WindowsNT或Windows95環(huán)境;而且運行時還需有動態(tài)鏈接庫OpenGL32.DLL、Glu32.DLL,這兩個文件在安裝WindowsNT時已自動裝載到C:WINNTSYSTEM32目錄下(這里假定用戶將WindowsNT安裝在C盤上);而對于使用Windows95平臺的用戶,則需手工將兩個動態(tài)庫復(fù)制到Windows95目錄的SYSTEM子目錄中。安裝了WindowsNT/95和VC4.1后,用戶就具備了基于OpenGL開發(fā)三維圖形軟件的基本條件。OpenGL程序設(shè)計的基本步驟1.OpenGL在WindowsNT下的運

8、行機制OpenGL工作在客戶機/服務(wù)器模式下,當(dāng)客戶方(即基于OpenGL標(biāo)準(zhǔn)開發(fā)的應(yīng)用程序)向服務(wù)器(OpenGL核心機制)發(fā)出命令時,由服務(wù)器負(fù)責(zé)解釋這些命令。通常情況下,客戶方和服務(wù)器是運行在同一臺微機上的。由于OpenGL的運行機制是客戶機/服務(wù)器模式,這使得用戶能夠十分方便地在網(wǎng)絡(luò)環(huán)境下使用OpenGL,OpenGL在WindowsNT上的這種實現(xiàn)方式通常稱為網(wǎng)絡(luò)透明性。OpenGL的圖形庫函數(shù)封裝在動態(tài)鏈接庫OpenGL32.DLL中,客戶機中的所有OpenGL函數(shù)調(diào)用,都被傳送到服務(wù)器上,由WinSrv.DLL實現(xiàn)功能,再將經(jīng)過處理的指令發(fā)送到Win32設(shè)備驅(qū)動接口(DDI),從

9、而實現(xiàn)在計算機屏幕上產(chǎn)生圖像。若使用OpenGL圖形加速卡,則上述機制中將添加兩個驅(qū)動器:OpenGL可裝載客戶模塊(OpenGLICD)將安裝在客戶端;硬件指定DDI將安裝在服務(wù)器端,與WinDDI同一級別。2.OpenGL的庫函數(shù)開發(fā)基于OpenGL的應(yīng)用程序,必須先了解OpenGL的庫函數(shù)。OpenGL函數(shù)命令方式十分有規(guī)律,每個庫函數(shù)均有前綴gl、glu、aux,分別表示該函數(shù)屬于OpenGL基本庫、實用庫或輔助庫。WindowsNT下的OpenGL包含了100多個核心函數(shù),均以gl作為前綴,同時還支持另外四類函數(shù):OpenGL實用庫函數(shù):43個,以glu作為前綴;OpenGL輔助庫函

10、數(shù):31個,以aux作為前綴;Windows專用庫函數(shù)(WGL):6個,以wgl作為前綴;Win32API函數(shù)(WGL):5個,無前綴。OpenGL的115個核心函數(shù)提供了最基本的功能,可以實現(xiàn)三維建模、建立光照模型、反走樣、紋理映射等;OpenGL實用庫函數(shù)在核心函數(shù)的上一層,這類函數(shù)提供了簡單的調(diào)用方法,其實質(zhì)是調(diào)用核心函數(shù),目的是減輕開發(fā)者的編程工作量;OpenGL輔助庫函數(shù)是一些特殊的函數(shù),可以供初學(xué)者熟悉OpenGL的編程機制,然而使用輔助庫函數(shù)的應(yīng)用程序只能在Win32環(huán)境中使用,可移植性較差,所以開發(fā)者應(yīng)盡量避免使用輔助庫函數(shù);Windows專用庫函數(shù)(WGL)主要針對Windo

11、wsNT/95環(huán)境的OpenGL函數(shù)調(diào)用;Win32API函數(shù)用于處理像素存儲格式、雙緩存等函數(shù)調(diào)用。3.VC環(huán)境下基于OpenGL的編程步驟下面介紹在VC環(huán)境中建立基于Opeetting菜單選項,在Link欄的Lib輸入域中添加openg132.lib、glu32.lib,若需使用OpenGL的輔助庫函數(shù),則還需添加glaux.lib。(3)選擇View/ClassWizard菜單選項,打開MFC對話框,在ClassName欄中選擇CMyTestView類,進(jìn)行以下操作:選擇WM_CREATE消息,鼠標(biāo)單擊EditCode,將OpenGL初始化代碼添加到OnCreate()函數(shù)中:/*定義像

12、素存儲格式*/PIXELFORMATDESCRIPTORpfd=sizeof(PIXELFORMATDESCRIPTOR),1,PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL,PFD_TYPE_RGBA,24,0,0,0,0,0,0,0,0,0,0,0,0,0 32,0,0,PFD_MAIN_PLANE,0,0,0,0,CCLientdc(this);intpixelFormat=ChoosePixelFormat(dc.m_hDC,&pfd);BOOLsuccess=SetPixelFormat(dc.m_hDC,pixelFormat,&pfd);m_hRC=w

13、glCreateContext(dc.m_hDC);選擇WM_DESTORY消息,在OnDestory()中添加以下代碼:wglDeleteContext(m_hRC);在MyTestView.cpp中,將以下代碼添加到PreCreateWindows()函數(shù)中:cs.style|=WS_CLIPCHILDREN|WS_CLIPSIBLINGS;OpenGL只對WS_CLIPCHILDREN|WS_CLIPSIBLINGS類型窗口有效;在MyTestView.cpp中,將以下代碼添加到OnDraw()函數(shù)中:wglMakeCurrent(pDC-m_hDC,m_hRC);DrawScene()

14、;/用戶自定義函數(shù),用于繪制三維場景;wglMakeCurrent(pDC-m_hDC,NULL);在MyTestView.cpp中,添加成員函數(shù)DrawScene():voidCMyTestView:DrawScene()/*繪制三維場景*/(4)在MyTestView.h中包含以下頭文件并添加類成員說明:#include#include#include在CTestView類中的protected:段中添加成員變量聲明:HGLRCm_hRC;同時添加成員函數(shù)聲明:DrawScene();這樣,一個基于OpenGL標(biāo)準(zhǔn)的程序框架已經(jīng)構(gòu)造好,用戶只需在DrawScene()函數(shù)中添加程序代碼即可

15、。建立三維實體模型三維實體建模是整個圖形學(xué)的基礎(chǔ),要生成高逼真度的圖像,首先要生成高質(zhì)量的三維實體模型。OpenGL中提供了十幾個生成三維實體模型的輔助庫函數(shù),這些函數(shù)均以aux作為函數(shù)名的前綴。簡單的模型,如球體、立方體、圓柱等可以使用這些輔助函數(shù)來實現(xiàn),如auxWireSphere(GLdoubleradius)(繪制一半徑為radius的網(wǎng)狀球體)。但是這些函數(shù)難以滿足建立復(fù)雜三維實體的需要,所以用戶可以通過其它建模工具(如3DS等)來輔助建立三維實體模型數(shù)據(jù)庫。筆者在三維實體的建模過程中采用3DS提供的2D Shape、3DLofter和3DEditor進(jìn)行模型的編輯,最后通過將模型數(shù)

16、據(jù)以DXF文件格式輸出存儲供應(yīng)用程序使用。真實感圖形的繪制1.定義光照模型和材質(zhì)(1)光源。OpenGL提供了一系列建立光照模型的庫函數(shù),使用戶可以十分方便地在三維場景中建立所需的光照模型。OpenGL中的光照模型由環(huán)境光(AmbientLight)、漫射光(DiffuseLight)、鏡面反射光(SpecularLight)等組成,同時還可設(shè)置光線衰減因子來模擬真實的光源效果。例如,定義一個黃色光源如下:GlfloatLight_position=1.0,1.0,1.0,0.0,;GlfloatLight_diffuse=1.0,1.0,0.0,1.0,;glLightfv(GL_LIGHT

17、0,GL_POSTTION,light_position);/定義光源位置glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);/定義光源漫射光光源必須經(jīng)過啟動后才會影響三維場景中的實體,可以通過以下指令使光源有效:glEnable(LIGHTING);/啟動光照模型;glEnable(GL_LIGHT0);/使光源GL_LIGHT0有效;OpenGL中一共可以定義GL_LIGHT0GL_LIGHT7八個光源。(2)材質(zhì)。OpenGL中的材質(zhì)是指構(gòu)成三維實體的材料在光照模型中對于紅、綠、藍(lán)三原色的反射率。與光源的定義類似,材質(zhì)的定義分為環(huán)境、漫射、鏡面反射

18、成分,另外還有鏡面高光指數(shù)、輻射成分等。通過對三維實體的材質(zhì)定義可以大大提高應(yīng)用程序所繪制的三維場景的逼真程度。例如:/*設(shè)置材質(zhì)的反射成分*/GLfloatmat_ambient=0.8,0.8,0.8,1.0;GLfloatmat_diffuse=0.8,0.0,0.8,1.0;/*紫色*/GLfloatmat_specular=1.0,0.0,1.0,1.0;/*鏡面高光亮紫色*/GLfloatmat_shiness=100.0;/*高光指數(shù)*/glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);/*定義環(huán)境光反射率*/glMaterialfv(G

19、L_FRONT,GL_DIFFUSE,mat_diffuse);/*定義漫射光反射率*/glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);/*定義鏡面光反射率*/glMaterialfv(GL_FRONT,GL_SHINESS,mat_shiness);/*定義高光指數(shù)*/(3)材質(zhì)RGB值與光源RGB值的關(guān)系。OpenGL中材質(zhì)的顏色與光照模型中光源的顏色含義略有不同。對于光源,R、G、B值表示三原色在光源中所占有的比率;而對于材質(zhì)定義,R、G、B的值表示具有這種材質(zhì)屬性的物體對于三原色的反射比率,場景中物體所呈現(xiàn)的顏色與光照模型、材質(zhì)定義都相關(guān)

20、。例如,若定義的光源顏色是(Lr,Lg,Lb)=(1.0,1.0,1.0)(白光),物體的材質(zhì)顏色定義為(Mr,Mg,Mb)=(0.0,0.0,0.8),則最終到達(dá)人眼的物體顏色應(yīng)當(dāng)是(Lr*Mr,Lg*Mg,Lb*Mb)=(0.0,0.0,0.8)(藍(lán)色)。2.讀取三維模型數(shù)據(jù)為了繪制三維實體,我們首先必須將預(yù)先生成的三維實體模型從三維實體模型庫中讀出。下圖描述了讀取三維實體模型的流程。3.三維實體繪制由于3DS的DXF文件中對于三維實體的描述是采用三角形面片逼近的方法,而在OpenGL函數(shù)庫中,提供了繪制三角形面片的方法,所以為三維實體的繪制提供了方便。以下提供了繪制三角形面片的方法:gl

21、Begin(TRANGLES);/定義三角形繪制開始glVertexf(GLfloat)x1,(GLfloat)y1,(GLfloat)z1);/第一個頂點glVertexf(GLfloat)x2,(GLfloat)y2,(GLfloat)z2);/第二個頂點glVertexf(GLfloat)x3,(GLfloat)y3,(GLfloat)z3);/第三個頂點glEnd();/繪制結(jié)束為了提高三維實時動畫的顯示速度,我們利用了OpenGL庫中的顯示列表(DisplayList)的功能,將三維場景中的實體分別定義為單獨的顯示列表,預(yù)先生成三維實體。在圖形顯示時,只需調(diào)用所需的顯示列表即可顯示相

22、應(yīng)的三維實體,而不需要重新計算實體在場景中的坐標(biāo),避免了大量的浮點運算。在調(diào)用顯示列表前所作的旋轉(zhuǎn)、平移、光照、材質(zhì)的設(shè)定都將影響顯示列表中的三維實體的顯示效果。具體實現(xiàn)算法如下:for(ObjectNo=0;ObjectNo實體個數(shù);ObjectNo+)glNewList(ObjectNo,GL_COMPILE);/創(chuàng)建第ObjectNo個實體的顯示列表for(Fac OpenGL是近幾年發(fā)展起來的一個性能卓越的三維圖形標(biāo)準(zhǔn),它是在SGI等多家世界聞名的計算機公司的倡導(dǎo)下,以SGI的GL三維圖形庫為基礎(chǔ)制定的一個通用共享的開放式三維圖形標(biāo)準(zhǔn)。目前,包括Microsoft、SGI、IBM、DE

23、C、SUN、HP等大公司都采用了OpenGL做為三維圖形標(biāo)準(zhǔn),許多軟件廠商也紛紛以O(shè)penGL為基礎(chǔ)開發(fā)出自己的產(chǎn)品,其中比較著名的產(chǎn)品包括動畫制作軟件Soft Image和3D Studio MAX、仿真軟件Open Inventor、VR軟件World Tool Kit、CAM軟件ProEngineer、GIS軟ARC/INFO等等。值得一提的是,隨著Microsoft公司在Windows NT和最新的Windows 95中提供了OpenGL標(biāo)準(zhǔn)及OpenGL三維圖形加速卡(如北京黎明電子技術(shù)公司的AGC-3D系列三維圖形加速卡)的推出,OpenGL將在微機中有廣泛地應(yīng)用,同時也為廣大用戶

24、提供了在微機上使用以前只能在高性能圖形工作站上運行的各種軟件的機會。OpenGL實際上是一個開放的三維圖形軟件包,它獨立于窗口系統(tǒng)和操作系統(tǒng),以它為基礎(chǔ)開發(fā)的應(yīng)用程序可以十分方便地在各種平臺間移植;OpenGL可以與Visual C+緊密接口,便于實現(xiàn)機械手的有關(guān)計算和圖形算法,可保證算法的正確性和可靠性;OpenGL使用簡便,效率高。它具有七大功能:1)建模OpenGL圖形庫除了提供基本的點、線、多邊形的繪制函數(shù)外,還提供了復(fù)雜的三維物體(球、錐、多面體、茶壺等)以及復(fù)雜曲線和曲面(如Bezier、Nurbs等曲線或曲面)繪制函數(shù)。2)變換OpenGL圖形庫的變換包括基本變換和投影變換?;?/p>

25、變換有平移、旋轉(zhuǎn)、變比鏡像四種變換,投影變換有平行投影(又稱正射投影)和透視投影兩種變換。其變換方法與機器人運動學(xué)中的坐標(biāo)變換方法完全一致,有利于減少算法的運行時間,提高三維圖形的顯示速度。3)顏色模式設(shè)置OpenGL顏色模式有兩種,即RGBA模式和顏色索引(Color Index)。4)光照和材質(zhì)設(shè)置OpenGL光有輻射光(Emitted Light)、環(huán)境光(Ambient Light)、漫反射光(Diffuse Light)和鏡面光(Specular Light)。材質(zhì)是用光反射率來表示。場景(Scene)中物體最終反映到人眼的顏色是光的紅綠藍(lán)分量與材質(zhì)紅綠藍(lán)分量的反射率相乘后形成的顏色

26、。5)紋理映射(Texture Mapping)利用OpenGL紋理映射功能可以十分逼真地表達(dá)物體表面細(xì)節(jié)。6)位圖顯示和圖象增強圖象功能除了基本的拷貝和像素讀寫外,還提供融合(Blending)、反走樣(Antialiasing)和霧(fog)的特殊圖象效果處理。以上三條可是被仿真物更具真實感,增強圖形顯示的效果。7)雙緩存(Double Buffering)動畫雙緩存即前臺緩存和后臺緩存,簡而言之,后臺緩存計算場景、生成畫面,前臺緩存顯示后臺緩存已畫好的畫面。此外,利用OpenGL還能實現(xiàn)深度暗示(Depth Cue)、運動模糊(Motion Blur)等特殊效果。從而實現(xiàn)了消隱算法。(1

27、)OpenGL簡介作者:pioneer OpenGL是近幾年發(fā)展起來的一個性能卓越的三維圖形標(biāo)準(zhǔn),它是在SGI等多家世界聞名的計算機公司的倡導(dǎo)下,以SGI的GL三維圖形庫為基礎(chǔ)制定的一個通用共享的開放式三維圖形標(biāo)準(zhǔn)。目前,包括Microsoft、SGI、IBM、DEC、SUN、HP等大公司都采用了OpenGL做為三維圖形標(biāo)準(zhǔn),許多軟件廠商也紛紛以O(shè)penGL為基礎(chǔ)開發(fā)出自己的產(chǎn)品,其中比較著名的產(chǎn)品包括動畫制作軟件Soft Image和3D Studio MAX、仿真軟件Open Inventor、VR軟件World Tool Kit、CAM軟件ProEngineer、GIS軟ARC/INFO等等。值得一提的是,隨著Microsoft公司在Windows NT和最新的Windows 95中提供了OpenGL標(biāo)準(zhǔn)及OpenGL三維圖形加速卡(如北京黎明電子技術(shù)公司的AGC-3D系列三維圖形加速卡)的推出,OpenGL將在微機中有廣泛地應(yīng)用,同時也為廣大用戶提供了在微機上使用以前只能在高性能圖形工作站上運行的各種軟件的機會。(2)OpenGL特點及功能OpenGL實

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論