


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
OpenGLforWindowsNT及其程序設(shè)計
OpenGL是在SGI、Microsoft、DEC、IBM和Intel等多家世界著名計算機公司的倡導(dǎo)下,基于SGI的GL標準,制定的一個通用共享的開放式三維圖形標準。前幾年,OpenGL雖然是開放式的標準,但是只能在具有UNIX操作系統(tǒng)的各種昂貴的工作站之間通用;盡管工作站上的OpenGL性能優(yōu)越、編程方便、生成圖形精美逼真,但是只有少數(shù)人能體會其中樂趣,而令大多數(shù)PC機用戶望塵莫及。隨著計算機技術(shù)的發(fā)展,工作站與PC機的性能日趨接近。Microsoft公司首先將OpenGL圖形庫鏈接到WindowsNT中,目前又將OpenGL動態(tài)庫掛到最新Windows95上,這樣,廣大PC機用戶就可充分享受OpenGL的樂趣了。更令人高興的是,目前國內(nèi)外出現(xiàn)了專門對OpenGL進行硬件加速的三維圖形加速卡。這樣,普通用戶只要擁有一臺Pentium90以上、16MBRAM、520MB以上硬盤容量的PC機以及一臺43cm以上的大屏幕監(jiān)視器和一塊OpenGL三維圖形加速卡組成的系統(tǒng),就能與圖形工作站相媲美,但價格卻便宜數(shù)十倍。本文作者一直從事計算機圖形應(yīng)用開發(fā)工作。原來是在SGI工作站上利用OpenGL開發(fā)圖形程序,后來又首先在國內(nèi)第一塊三維圖形加速卡AGC-3D上基于WindowsNT的VisualC++2.0環(huán)境下繼續(xù)進行開發(fā)。在開發(fā)過程中,同一OpenGL程序幾乎不用修改就能在兩個平臺間來回移植,效果甚好。一、OpenGL特點及功能OpenGL是一個開放的三維圖形軟件包,它獨立于窗口系統(tǒng)和操作系統(tǒng),能十分方便地在各平臺間移植。OpenGL具有七大功能。(1)建模OpenGL圖形庫除了提供基本的點、線、多邊形的繪制函數(shù)外,還提供了復(fù)雜的三維物體(如球、錐、多面體、茶壺等)以及復(fù)雜曲線和曲面(如Bezier、Nurbs等曲線或曲面)繪制函數(shù)。(2)變換OpenGL圖形庫的變換包括基本變換和投影變換。基本變換有平移、旋轉(zhuǎn)、變比和鏡像四種變換,投影變換有平行投影(又稱正射投影)和透視投影兩種變換。(3)顏色模式設(shè)置OpenGL顏色模式有兩種,即RGBA模式和顏色索引(ColorIndex)。(4)光照和材質(zhì)設(shè)置OpenGL光有輻射光(EmittedLight)、環(huán)境光(AmbientLight)、漫反射光(DiffuseLight)和鏡面光(SpecularLight)。材質(zhì)是用光反射率來表示。場景(Scene)中物體最終反映到人眼的顏色是光的紅綠藍分量與材質(zhì)紅綠藍分量的反射率相乘后形成的顏色。(5)紋理映射(TexureMapping)利用OpenGL紋理映射功能可以十分逼真地表達物體表面細節(jié)。(6)位圖顯示和圖像增強圖像功能除了基本的拷貝和像素讀寫外,還提供了融合(Blending)、反走樣(Antialiasing)和霧(fog)的特殊圖像效果處理。(7)雙緩存(DoubleBuffering)動畫雙緩存即前臺緩存和后臺緩存,簡而言之,后臺緩存計算場景、生成畫面,前臺緩存顯示后臺緩存已畫好的畫面。此外,利用OpenGL還能實現(xiàn)深度暗示(DepthCue)、運動模糊(MotionBlur)等特殊效果。二、OpenGLforWindowsNT圖形庫OpenGL圖形庫一共有100多個函數(shù)。其中核心函數(shù)有115個,它們是最基本的函數(shù),其前綴是gl;OpenGL實用庫(OpenGLutilitylibrary,GLU)的函數(shù)功能更高一些,如繪制復(fù)雜的曲線曲面、高級坐標變換、多邊形分割等,共有43個,前綴為glu;OpenGL輔助庫(OpenGLauxiliarylibrary,GLAUX)的函數(shù)是一些特殊的函數(shù),包括簡單的窗口管理、輸入事件處理、某些復(fù)雜三維物體繪制等函數(shù),共有31個,前綴為aux。此外,還有六個WGL函數(shù)非常重要,專用于OpenGL和WindowsNT窗口系統(tǒng)的連接,其前綴為wgl,主要用于創(chuàng)建和選擇圖形操作描述表(renderingcontexts)以及在窗口內(nèi)任一位置顯示字符位圖。這些功能是WindowsNT對OpenGL的唯一補充,見表1所示。表1管理圖形操作描述表的WGL函數(shù)另外,還有五個Win32函數(shù)用來處理像素格式(pixelformats)和雙緩存。由于它們是對Win32系統(tǒng)的擴展,因此不能應(yīng)用在其他OpenGL平臺上,見表2所示。表2管理像素格式Win32函數(shù)三、OpenGLforWindowsNT程序設(shè)計OpenGLforWindowsNT的程序設(shè)計與OpenGLforUNIX的程序設(shè)計有一點小區(qū)別,關(guān)鍵就在于如何將OpenGL與不同操作系統(tǒng)下的窗口系統(tǒng)連接起來。如果調(diào)用OpenGL輔助庫窗口管理函數(shù),則不用考慮這些問題。下面將主要介紹在WindowsNT下OpenGL的程序設(shè)計關(guān)鍵。1.圖形操作描述表在WindowsNT下窗口程序必須首先處理設(shè)備描述表(DeviceContexts,DC),DC包含許多如何在窗口上顯示圖形的信息,即指定畫筆和刷子的顏色,設(shè)置繪圖模式、調(diào)色板、映射模式以及其他圖形屬性。同樣,OpenGLforWindowsNT的程序也必須使用DC,這與其他Windows程序類似。但是,OpenGLforWindowsNT必須處理特殊的DC圖形操作描述表,這是DC中專為OpenGL使用的一種。一個OpenGL應(yīng)用圖形操作描述表內(nèi)有OpenGL與WindowsNT窗口系統(tǒng)相關(guān)的各種信息。一個OpenGL應(yīng)用首先必須創(chuàng)建一個圖形操作描述表,然后再啟動它,最后在所定義的窗口內(nèi)按常規(guī)方式調(diào)用OpenGL函數(shù)繪制圖形。一個圖形操作描述表不同于其他DC,它們調(diào)用每個GDI函數(shù)都需要一個句柄,而圖形操作描述表方式下只需一個句柄就可任意調(diào)用OpenGL函數(shù)。也就是說,只要當前啟用了某個圖形操作描述表,那么在未刪除圖形操作描述表之前可以調(diào)用任何OpenGL函數(shù),進行各種操作。2.像素格式在創(chuàng)建一個圖形操作描述表之前,首先必須設(shè)置像素格式。像素格式含有設(shè)備繪圖界面的屬性,這些屬性包括繪圖界面是用RGBA模式還是顏色表模式,像系緩存是用單緩存還是雙緩存,以及顏色位數(shù)、深度緩存和模板緩存所用的位數(shù),還有其他一些屬性信息。(1)像素格式結(jié)構(gòu)每個OpenGL顯示設(shè)備都支持一種指定的像素格式號。一般用一個名為PIXELFORMATDESCRIPTOR的結(jié)構(gòu)來表示某個特殊的像素格式,這個結(jié)構(gòu)包含26個屬性信息。Win32定義的PIXELFORMATDESCRIPTOR如下所示:typedefstructtagPIXELFORMATDESCRIPTOR{WORDnSize;WORDnVersion;DWORDdwFlags;BYTEiPixelType;BYTEcColorBits;BYTEcRedBits;BYTEcRedShift;BYTEcGreenBits;BYTEcGreenShift;BYTEcBlueBits;BYTEcBlueShift;BYTEcAlphaBits;BYTEcAlphaShift;BYTEcAccumBits;BYTEcAccumRedBits;BYTEcAccumGreenBits;BYTEcAccumBlueBits;BYTEcAccumAlphaBits;BYTEcDepthBits;BYTEcStencilBits;BYTEcAuxBuffers;BYTEilayerType;BYTEbReserved;DWORDdwLayerMask;DWORDdwVisibleMask;DWORDdwDamageMask;}3.創(chuàng)建圖形操作描述表正如前所述,必須創(chuàng)建圖形操作描述表并啟用它后,才能調(diào)用OpenGL函數(shù)在窗口內(nèi)進行各種圖形操作。一般說來,利用MFC中增補的管理圖形操作描述表方法來編程比較方便。下面舉一例:intCopenglView::OnCreate(LPCREATESTRUCTlpCreateStruct){if(CView::OnCreate(lpCreateStruct)==-1)return-1;//TODO:AddyourspecializedcreationcodeherePIXELFORMATDESCRIPTORpfd={sizeof(PIXELFORMATDESCRIPTIOR),//structuresizel,//structureversionnumberPFD-DRAW-TO-WINDOWS|PFD-SUPPORT-OPENGL,//propertyflagsPFD-TYPE-RGBA,//RGBAmode24,//24bitcolor0,0,0,0,0,0,//notconcernedwiththese0,0,0,0,0,0,0,//noalphaoraccumbuffer32,//32bitdepthbuffer0,0,//nostencilorauxbufferPFD-MAIN-PLANE,//mainlayertype0,//reserved0,0,0//unsupported};CClientDCclientDC(this);intpixelFormat=ChoosePixelFormat(clientDC.m-hDC,&pfd);BOOLresult=SetPixelFormat(clientDC.m-hDC,pixelFormat,&pfd);m-hRC=wglCreateContext(clientDC.m-hRC);return0;}voidCOpenglView::onDraw(CDC*pDC){COpenglDoc*pDoc=GetDocument();ASSERT-VAILD(pDoc);//TODO:adddrawcodefornativedataherewglMakeCurrent(pDC->m-hDC,m-hDC);DrawMyOpenGL();wglMakeCurrent(pDC->m-hDC,NULL);}voidCOpenglView::OnDestroy(){CView::OnDestroy();//TODO:AddyourmessagehandlercodeherewglDeleteContext(m-hRC);}在程序中,響應(yīng)WM-CREATE消息的函數(shù)OnCreate()僅僅只創(chuàng)建一個臨時的DC,當函數(shù)返回時,它自動刪除。因此,在這里不可能啟用圖形操作描述表。當應(yīng)用程序的窗口內(nèi)容得到更新后,MFC就調(diào)用OnDraw()函數(shù),在此啟用圖形操作描述表wglMakeCurrent()有效。然后,再調(diào)用自己用OpenGL寫的繪圖函數(shù)DrawMyOpenGL(),則程序就可進行任意的OpenGL圖形操作了。當繪圖結(jié)束后,再調(diào)用一次wglMakeCurrent(),但第二個參數(shù)設(shè)為NULL,意思是啟用圖形操作描述表無效,關(guān)閉圖形操作描述表。最后,當應(yīng)用程序結(jié)束時,MFC就調(diào)用OnDestroy()函數(shù)來響應(yīng)WM-DESTROY消息,
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年綠色照明項目合作計劃書
- 2025年絲絹紡織及精加工產(chǎn)品項目建議書
- 五年級數(shù)學(小數(shù)乘除法)計算題專項練習及答案
- 三年級數(shù)學計算題專項練習及答案集錦
- 右肺低分化腺癌護理查房
- 陜西青年職業(yè)學院《藥學專業(yè)創(chuàng)新創(chuàng)業(yè)拓展》2023-2024學年第二學期期末試卷
- 集寧師范學院《物流管理前沿講座》2023-2024學年第一學期期末試卷
- 集美大學誠毅學院《英語視聽說(四)》2023-2024學年第二學期期末試卷
- 青島工學院《機能實驗學》2023-2024學年第二學期期末試卷
- 青島幼兒師范高等專科學?!督ㄖo水排水》2023-2024學年第一學期期末試卷
- 【初中生物】食物中營養(yǎng)物質(zhì)課件2024-2025學年人教版生物七年級下冊
- 2025河北保定鈔票紙業(yè)限公司招聘33人易考易錯模擬試題(共500題)試卷后附參考答案
- 中專藥品gsp考試試題及答案
- 智慧教育解決方案
- 2025年共青團入團積極分子考試測試試卷題庫及答案
- 2024-2025學年人教版數(shù)學七下 第七章 相交線與平行線(含答案)
- 小件物品寄存和隨車托運登記表
- 手壓式手電筒設(shè)計(棘輪機構(gòu)及電路設(shè)計)
- 產(chǎn)品被預(yù)警、召回、索賠、退貨及顧客投訴管理程序
- 巖棉板外墻保溫真石漆施工方案
- 股權(quán)激勵機制在萬科集團中的運用分析
評論
0/150
提交評論