• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            OpenGL開(kāi)發(fā)庫(kù)的介紹[轉(zhuǎn)載]

              開(kāi)發(fā)基于 OpenGL 的應(yīng)用程序,必須先了解 OpenGL 的庫(kù)函數(shù)。它采用 C 語(yǔ)言風(fēng)格,提供大量的函數(shù)來(lái)進(jìn)行圖形的處理和顯示。 OpenGL 庫(kù)函數(shù)的命名方式非常有規(guī)律。所有 OpenGL 函數(shù)采用了以下格式:

              < 庫(kù)前綴 >< 根命令 >< 可選的參數(shù)個(gè)數(shù) >< 可選的參數(shù)類型 >

              庫(kù)前綴有 gl 、 glu 、 aux 、 glut 、 wgl 、 glx 、 agl 等等,分別表示該函數(shù)屬于 OpenGL 那個(gè)開(kāi)發(fā)庫(kù),從函數(shù)名后面中還可以看出需要多少個(gè)參數(shù)以及參數(shù)的類型。 I 代表 int 型, f 代表 float 型, d 代表 double 型, u 代表無(wú)符號(hào)整 型。例如 glVertex3fv() 表示了該函數(shù)屬于 gl 庫(kù),參數(shù)是三個(gè) float 型參數(shù)指針。我們用 glVertex*()
            來(lái)表示這一類函數(shù)。



              OpenGL 函數(shù)庫(kù)相關(guān)的 API 有核心庫(kù) (gl) 、實(shí)用庫(kù) (glu) 、輔助庫(kù) (aux) 、實(shí)用工具庫(kù) (glut) 、窗口庫(kù) (glx 、 agl 、 wgl) 和擴(kuò)展函數(shù)庫(kù)等。從圖可以看出, gl 是核心, glu 是對(duì) gl 的部分封裝。 glx 、 agl 、 wgl 是針對(duì)不同窗口系統(tǒng)的函數(shù)。 glut 是為跨平臺(tái)的 OpenGL 程序的工具包,比 aux 功能強(qiáng)大。擴(kuò)展函數(shù)庫(kù)是硬件廠商為實(shí)現(xiàn)硬件更新利用 OpenGL 的擴(kuò)展機(jī)制開(kāi)發(fā)的函數(shù)。下面逐一對(duì)這些庫(kù)進(jìn)行詳細(xì)介紹。

              1 . OpenGL 核心庫(kù)

              核心庫(kù)包含有 115 個(gè)函數(shù),函數(shù)名的前綴為 gl 。這部分函數(shù)用于常規(guī)的、核心的圖形處理。此函數(shù)由 gl.dll 來(lái)負(fù)責(zé)解釋執(zhí)行。由于許多函數(shù)可以接收不同數(shù)以下幾類。據(jù)類型的參數(shù),因此派生出來(lái)的函數(shù)原形多達(dá) 300 多個(gè)。核心庫(kù)中的函數(shù)主要可以分為以下幾類函數(shù):

              繪制基本幾何圖元的函數(shù): glBegain() 、 glEnd() 、 glNormal*() 、 glVertex*() ;

              矩陣操作、幾何變換和投影變換的函數(shù):如矩陣入棧函數(shù) glPushMatrix() ,矩陣出棧函數(shù) glPopMatrix() ,裝載矩陣函數(shù) glLoadMatrix() ,矩陣相乘函數(shù) glMultMatrix() ,當(dāng)前矩陣函數(shù) glMatrixMode() 和矩陣標(biāo)準(zhǔn)化函數(shù) glLoadIdentity() ,幾何變換函數(shù) glTranslate*() 、 glRotate*() 和 glScale*() ,投影變換函數(shù) glOrtho() 、 glFrustum() 和視口變換函數(shù) glViewport() ;

              顏色、光照和材質(zhì)的函數(shù):如設(shè)置顏色模式函數(shù) glColor*() 、 glIndex*() ,設(shè)置光照效果的函數(shù) glLight*() 、 glLightModel*() 和設(shè)置材質(zhì)效果函數(shù) glMaterial() ;

              顯示列表函數(shù):主要有創(chuàng)建、結(jié)束、生成、刪除和調(diào)用顯示列表的函數(shù) glNewList() 、 glEndList() 、 glGenLists() 、 glCallList() 和 glDeleteLists() ;

              紋理映射函數(shù):主要有一維紋理函數(shù) glTexImage1D() 、二維紋理函數(shù) glTexImage2D() 、設(shè)置紋理參數(shù)、紋理環(huán)境和紋理坐標(biāo)的函數(shù) glTexParameter*() 、 glTexEnv*() 和 glTetCoord*() ;

              特殊效果函數(shù):融合函數(shù) glBlendFunc() 、反走樣函數(shù) glHint() 和霧化效果 glFog*() ;

              光柵化、象素操作函數(shù):如象素位置 glRasterPos*() 、線型寬度 glLineWidth() 、多邊形繪制模式 glPolygonMode() ,讀取象素 glReadPixel() 、復(fù)制象素 glCopyPixel() ;

              選擇與反饋函數(shù):主要有渲染模式 glRenderMode() 、選擇緩沖區(qū) glSelectBuffer() 和反饋緩沖區(qū) glFeedbackBuffer() ;

              曲線與曲面的繪制函數(shù):生成曲線或曲面的函數(shù) glMap*() 、 glMapGrid*() ,求值器的函數(shù) glEvalCoord*() glEvalMesh*() ;

              狀態(tài)設(shè)置與查詢函數(shù): glGet*() 、 glEnable() 、 glGetError() 。

              2 . OpenGL 實(shí)用庫(kù) The OpenGL Utility Library (GLU)

              包含有 43 個(gè)函數(shù),函數(shù)名的前綴為 glu 。 OpenGL 提供了強(qiáng)大的但是為數(shù)不多的繪圖命令,所有較復(fù)雜的繪圖都必須從點(diǎn)、線、面開(kāi)始。 Glu 為了減輕繁重的編程工作,封裝了 OpenGL 函數(shù), Glu 函數(shù)通過(guò)調(diào)用核心庫(kù)的函數(shù),為開(kāi)發(fā)者提供相對(duì)簡(jiǎn)單的用法,實(shí)現(xiàn)一些較為復(fù)雜的操作。此函數(shù)由 glu.dll 來(lái)負(fù)責(zé)解釋執(zhí)行。 OpenGL 中的核心庫(kù)和實(shí)用庫(kù)可以在所有的 OpenGL 平臺(tái)上運(yùn)行。主要包括了以下幾種:

              輔助紋理貼圖函數(shù): gluScaleImage() 、 gluBuild1Dmipmaps() 、 gluBuild2Dmipmaps() ;

              坐標(biāo)轉(zhuǎn)換和投影變換函數(shù):定義投影方式函數(shù) gluPerspective() 、 gluOrtho2D() 、 gluLookAt() ,拾取投影視景體函數(shù) gluPickMatrix() ,投影矩陣計(jì)算 gluProject() 和 gluUnProject() ;

              多邊形鑲嵌工具: gluNewTess() 、 gluDeleteTess() 、 gluTessCallback() 、 gluBeginPolygon() 、 gluTessVertex() 、 gluNextContour() 、 gluEndPolygon() ;

              二次曲面繪制工具,主要有繪制球面、錐面、柱面、圓環(huán)面 gluNewQuadric() 、 gluSphere() 、 gluCylinder() 、 gluDisk() 、 gluPartialDisk() 、 gluDeleteQuadric() ;

              非均勻有理 B 樣條繪制工具:主要用來(lái)定義和繪制 Nurbs 曲線和曲面,包括 gluNewNurbsRenderer() 、 gluNurbsCurve() 、 gluBeginSurface() 、 gluEndSurface() 、 gluBeginCurve() 、 gluNurbsProperty() ;

              錯(cuò)誤反饋工具:獲取出錯(cuò)信息的字符串 gluErrorString() 。

              3 . OpenGL 輔助庫(kù)

              包含有 31 個(gè)函數(shù),函數(shù)名前綴為 aux 。這部分函數(shù)提供窗口管理、輸入輸出處理以及繪制一些簡(jiǎn)單三維物體。此函數(shù)由 glaux.dll 來(lái)負(fù)責(zé)解釋執(zhí)行。創(chuàng)建 aux 庫(kù)是為了學(xué)習(xí)和編寫 OpenGL 程序,它更像是一個(gè)用于測(cè)試創(chuàng)意的預(yù)備基礎(chǔ)接管。 Aux 庫(kù)在 windows 實(shí)現(xiàn)有很多錯(cuò)誤,因此很容易導(dǎo)致頻繁的崩潰。在跨平臺(tái)的編程實(shí)例和演示中, aux 很大程度上已經(jīng)被 glut 庫(kù)取代。 OpenGL 中的輔助庫(kù)不能在所有的 OpenGL 平臺(tái)上運(yùn)行。

              輔助庫(kù)函數(shù)主要包括以下幾類:

              窗口初始化和退出函數(shù): auxInitDisplayMode() 和 auxInitPosition() ;

              窗口處理和時(shí)間輸入函數(shù): auxReshapeFunc() 、 auxKeyFunc() 和 auxMouseFunc() ;

              顏色索引裝入函數(shù): auxSetOneColor() ;

              三維物體繪制函數(shù):包括了兩種形式網(wǎng)狀體和實(shí)心體,如繪制立方體 auxWireCube() 和 auxSolidCube() 。這里以網(wǎng)狀體為例,長(zhǎng)方體 auxWireBox() 、環(huán)形圓紋面 auxWireTorus() 、圓柱 auxWireCylinder() 、二十面體 auxWireIcosahedron() 、八面體 auxWireOctahedron() 、四面體 auxWireTetrahedron() 、十二面體 auxWireDodecahedron() 、圓錐體 auxWireCone() 和茶壺 auxWireTeapot() ;

              背景過(guò)程管理函數(shù): auxIdleFunc() ;

              程序運(yùn)行函數(shù): auxMainLoop() 。

              4 . OpenGL 工具庫(kù) OpenGL Utility Toolkit

              包含大約 30 多個(gè)函數(shù),函數(shù)名前綴為 glut 。 glut 是不依賴于窗口平臺(tái)的 OpenGL 工具包,由 Mark KLilgrad 在 SGI 編寫(現(xiàn)在在 Nvidia ),目的是隱藏不同窗口平臺(tái) API 的復(fù)雜度。 函數(shù)以 glut 開(kāi)頭,它們作為 aux 庫(kù)功能更強(qiáng)的替代品,提供更為復(fù)雜的繪制功能,此函數(shù)由 glut.dll 來(lái)負(fù)責(zé)解釋執(zhí)行。由于 glut 中的窗口管理函數(shù)是不依賴于運(yùn)行環(huán)境的,因此 OpenGL 中的工具庫(kù)可以在 X-Window, Windows NT, OS/2 等系統(tǒng)下運(yùn)行,特別適合于開(kāi)發(fā)不需要復(fù)雜界面的 OpenGL 示例程序。對(duì)于有經(jīng)驗(yàn)的程序員來(lái)說(shuō),一般先用 glut 理順 3D 圖形代碼,然后再集成為完整的應(yīng)用程序。

              這部分函數(shù)主要包括:

              窗口操作函數(shù):窗口初始化、窗口大小、窗口位置函數(shù)等 [glutInit() 、 glutInitDisplayMode() 、 glutInitWindowSize() 、 glutInitWindowPosition()] ;

              回調(diào)函數(shù):響應(yīng)刷新消息、鍵盤消息、鼠標(biāo)消息、定時(shí)器函數(shù) [GlutDisplayFunc() 、 glutPostRedisplay() 、 glutReshapeFunc() 、 glutTimerFunc() 、 glutKeyboardFunc() 、 glutMouseFunc()] ;

              創(chuàng)建復(fù)雜的三維物體:這些和 aux 庫(kù)的函數(shù)功能相同;

              菜單函數(shù):創(chuàng)建添加菜單的函數(shù) GlutCreateMenu() 、 glutSetMenu() 、 glutAddMenuEntry() 、 glutAddSubMenu() 和 glutAttachMenu() ;

              程序運(yùn)行函數(shù): glutMainLoop() 。

              5 . Windows 專用庫(kù)

              針對(duì) windows 平臺(tái)的擴(kuò)展,包含有 16 個(gè)函數(shù),函數(shù)名前綴為 wgl 。這部分函數(shù)主要用于連接 OpenGL 和 Windows ,以彌補(bǔ) OpenGL 在文本方面的不足。 Windows 專用庫(kù)只能用于 Windows 環(huán)境中。

              這類函數(shù)主要包括以下幾類:

              繪圖上下文相關(guān)函數(shù): wglCreateContext() 、 wglDeleteContext() 、 wglGetCurrentContent() 、 wglGetCurrentDC() 、 wglDeleteContent() ;

              文字和文本處理函數(shù): wglUseFontBitmaps() 、 wglUseFontOutlines() ;

              覆蓋層、地層和主平面層處理函數(shù): wglCopyContext() 、 wglCreateLayerPlane() 、 wglDescribeLayerPlane() 、 wglReakizeLayerPlatte() ;

              其他函數(shù): wglShareLists() 、 wglGetProcAddress() 。

              6 . Win32 API 函數(shù)庫(kù)

              包含有 6 個(gè)函數(shù),函數(shù)名無(wú)專用前綴,是 win32 擴(kuò)展函數(shù)。這部分函數(shù)主要用于處理像素存儲(chǔ)格式和雙幀緩存;這 6 個(gè)函數(shù)將替換 Windows GDI 中原有的同樣的函數(shù)。 Win32API 函數(shù)庫(kù)只能用于 Windows 95/98/NT 環(huán)境中。

              7 . X 窗口專用庫(kù)

              是針對(duì) Unix 和 Linux 的擴(kuò)展函數(shù)。包括渲染上下文、繪制圖元、顯示列表、紋理貼圖等;
            初始化: glXQueryExtension() ;

              渲染上下文函數(shù): glXCreateContext() 、 glXDestroyContext() 、 glXCopyContext() 、 glXMakeCurrent() 、 glXCreateGLXPixmap() ;

              執(zhí)行: glXWaitGL() 、 glXWaitX() ;

              緩沖區(qū)和字體: glXSwapBuffers() 、 glXUseXFont() 。

              8 .其他擴(kuò)展庫(kù)

              這些函數(shù)可能是新的 OpenGL 函數(shù),并沒(méi)有在標(biāo)準(zhǔn) OpenGL 庫(kù)中實(shí)現(xiàn),或者它們是用來(lái)擴(kuò)展已存在的OpenGL 函數(shù)的功能。和 glu 、 glx 和 wgl 一樣,這些 OpenGL 擴(kuò)展是由硬件廠商和廠商組織開(kāi)發(fā)的。OpenGL 擴(kuò)展 (OpenGL Extention) 包含了大量的擴(kuò)展 API 函數(shù)。

              隨著硬件的更新,硬件廠商首先向 SGI 申請(qǐng)登記新的擴(kuò)展,編寫規(guī)格說(shuō)明書( specification )。然后按照說(shuō)明書進(jìn)行開(kāi)發(fā)擴(kuò)展程序。不同的 OpenGL 實(shí)現(xiàn)( OpenGL Implementation )支持的擴(kuò)展可能不一樣,只有隨著某一擴(kuò)展的推廣與應(yīng)用以及硬件技術(shù)的提高該擴(kuò)展才會(huì)在所有的 OpenGL 實(shí)現(xiàn)中被給予支持,從而最終成為 OpenGL 標(biāo)準(zhǔn)庫(kù)的一部分。擴(kuò)展由 SGI 維護(hù),在 SGI 網(wǎng)站上列出了目前公開(kāi)的已注冊(cè)的擴(kuò)展及其官方說(shuō)明書。擴(kuò)展源由擴(kuò)展函數(shù)的后綴來(lái)指明 ( 或使用擴(kuò)展常量后綴 ) 。例如,后綴 WIN 表明一個(gè)符合 Windows 規(guī)范的擴(kuò)展, EXT 或 ARB 后綴表明該擴(kuò)展由多個(gè)賣主定義。

              下面給出 OpenGL 官方規(guī)定的命名規(guī)則:
              ARB – OpenGL Architecture Review Board 正式核準(zhǔn)的擴(kuò)展,往往由廠商開(kāi)發(fā)的擴(kuò)展發(fā)展而來(lái),如果同時(shí)存在廠商開(kāi)發(fā)的擴(kuò)展和 ARB 擴(kuò)展,應(yīng)該優(yōu)先使用 ARB 擴(kuò)展;

              EXT – 多家 OpenGL 廠商同意支持的擴(kuò)展;

              HP – Hewlett-Packard 惠普;

              IBM – International Business Machines ;

              KTX – Kinetix, maker of 3D Studio Max ;

              INTEL – Intel 公司;

              NV – NVIDIA 公司;

              MESA – Brian Paul's freeware portable OpenGL implementation ;

              SGI – Silicon Graphics 公司開(kāi)發(fā)的擴(kuò)展;

              SGIX – Silicon Graphics (experimental) 公司開(kāi)發(fā)的實(shí)驗(yàn)性擴(kuò)展;

              SUN – Sun Microsystems ;

              WIN – Microsoft 。

              由于 OpenGL 擴(kuò)展在針對(duì)不同平臺(tái)和不同驅(qū)動(dòng), OpenGL 不可能把所有的接口程序全部放到 gl.h 、 glx.h 、 wgl.h 中,而是將這些函數(shù)頭放在了 glext.h 、 glxext.h 和 wglext.h 中。這些擴(kuò)展被看作時(shí) OpenGL 核心庫(kù)規(guī)范的增加和修改。

            posted on 2007-04-07 22:08 楊粼波 閱讀(735) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            色综合色天天久久婷婷基地| 精品午夜久久福利大片| 狠狠88综合久久久久综合网| 国产69精品久久久久观看软件| 久久一区二区三区99| 青青热久久国产久精品 | 色综合久久精品中文字幕首页| 国内精品久久久久影院一蜜桃| 国产高潮国产高潮久久久| 久久久国产精品福利免费| 狠狠色综合久久久久尤物| 四虎亚洲国产成人久久精品| 日韩欧美亚洲国产精品字幕久久久| 亚洲国产精品成人AV无码久久综合影院| 99久久免费国产精品特黄| 中文字幕无码免费久久| 国产午夜精品久久久久九九| 久久久久久久久久久| 精品水蜜桃久久久久久久| 亚洲欧洲久久av| 国产一久久香蕉国产线看观看| 久久精品中文字幕有码| 国产99久久精品一区二区| 亚洲午夜久久久久久久久久| 国产精品久久久久久| 久久免费视频1| 人妻无码精品久久亚瑟影视| 国产三级久久久精品麻豆三级| 久久艹国产| 久久香蕉综合色一综合色88| 伊人久久久AV老熟妇色| 亚洲国产天堂久久综合| 精品久久久久久久久久久久久久久| 精品久久久久久无码专区不卡| 久久久亚洲AV波多野结衣| 亚洲欧洲精品成人久久奇米网| 久久久中文字幕日本| 精品久久久久久无码国产| 久久国产一区二区| 99麻豆久久久国产精品免费| 99精品国产在热久久无毒不卡 |