時間:2024-12-06 | 欄目:編程網站 | 點擊:次
OpenGL(Open Graphics Library)是個(ge)定義了一(yi)(yi)個(ge)跨(kua)編程(cheng)語言、跨(kua)平臺的(de)程(cheng)序(xu)接(jie)口(kou)(Application programming interface)的(de)規格(ge),它(ta)用于(yu)(yu)生成二維、三維圖像。這個(ge)接(jie)口(kou)由近三百(bai)五(wu)十(shi)個(ge)不同的(de)函(han)數調用組成,用來從簡單(dan)的(de)圖形比特(te)繪制復雜的(de)三維景象。而另(ling)一(yi)(yi)種程(cheng)序(xu)接(jie)口(kou)系統是僅用于(yu)(yu)Microsoft Windows上的(de)Direct3D。OpenGL常(chang)用于(yu)(yu)CAD、虛(xu)擬實境、科學可視(shi)化(hua)程(cheng)序(xu)和電(dian)子游戲開(kai)發。OpenGL的(de)高效實現(利用了圖形加速(su)硬件)存(cun)在于(yu)(yu)Windows,很多UNIX平臺和MacOS。這些(xie)實現一(yi)(yi)般由顯示設備(bei)廠商提供(gong),而且非(fei)常(chang)依(yi)賴于(yu)(yu)該廠商提供(gong)的(de)硬件。開(kai)放源(yuan)代(dai)碼庫Mesa是一(yi)(yi)個(ge)純基于(yu)(yu)軟(ruan)件的(de)圖形API,它(ta)的(de)代(dai)碼兼容(rong)于(yu)(yu)OpenGL。但(dan)是,由于(yu)(yu)許可證的(de)原因,它(ta)只(zhi)聲稱是一(yi)(yi)個(ge)“非(fei)常(chang)相似”的(de)API。
OpenGL規范由(you)1992年成立(li)(li)的(de)(de)(de)(de)(de)OpenGL架構(gou)評審委員(yuan)會(ARB)維護。ARB由(you)一(yi)些特別興趣于創建一(yi)個統一(yi)的(de)(de)(de)(de)(de)普遍可(ke)用(yong)(yong)的(de)(de)(de)(de)(de)API的(de)(de)(de)(de)(de)公司組成。根(gen)據OpenGL官(guan)方(fang)(fang)網站(zhan),2002年6月的(de)(de)(de)(de)(de)ARB投(tou)票成員(yuan)包(bao)括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans & Sutherland、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和(he)Sun Microsystems,Microsoft曾是(shi)創立(li)(li)成員(yuan)之一(yi),但已于2003年3月退(tui)出(chu)。獨立(li)(li)廠商(shang)創建一(yi)種新(xin)技術時,OpenGL標準允(yun)許它(ta)(ta)們(men)通過“擴(kuo)展(zhan)”的(de)(de)(de)(de)(de)方(fang)(fang)法提供(gong)所擴(kuo)展(zhan)的(de)(de)(de)(de)(de)功能。然后一(yi)個擴(kuo)展(zhan)就(jiu)分(fen)成兩部(bu)分(fen)發布:包(bao)含擴(kuo)展(zhan)函數(shu)原型的(de)(de)(de)(de)(de)頭文件和(he)作為廠商(shang)的(de)(de)(de)(de)(de)設備驅動。每(mei)個廠商(shang)有一(yi)個用(yong)(yong)于命名它(ta)(ta)們(men)的(de)(de)(de)(de)(de)新(xin)函數(shu)和(he)常量的(de)(de)(de)(de)(de)字母縮(suo)寫(xie)。例如,NVIDIA的(de)(de)(de)(de)(de)縮(suo)寫(xie)(“NV”)用(yong)(yong)于定義它(ta)(ta)們(men)的(de)(de)(de)(de)(de)專(zhuan)有函數(shu)“glCombinerParameterfvNV()”和(he)它(ta)(ta)們(men)的(de)(de)(de)(de)(de)常量“GL_NORMAL_MAP_NV”。如果多于一(yi)個廠商(shang)同意實(shi)現相同的(de)(de)(de)(de)(de)擴(kuo)展(zhan)功能,那么就(jiu)用(yong)(yong)縮(suo)寫(xie)“EXT”。進一(yi)步,架構(gou)評審委員(yuan)會可(ke)能“祝(zhu)福”這個擴(kuo)展(zhan),那么這就(jiu)被(bei)稱為一(yi)個“標準擴(kuo)展(zhan)”,使用(yong)(yong)縮(suo)寫(xie)“ARB”。第一(yi)個ARB擴(kuo)展(zhan)是(shi)GL_ARB_multitexture。根(gen)據官(guan)方(fang)(fang)擴(kuo)展(zhan)提升(sheng)路徑,多紋理(li)不再是(shi)可(ke)選實(shi)現的(de)(de)(de)(de)(de)ARB擴(kuo)展(zhan),它(ta)(ta)已經是(shi)OpenGL 1.4以后的(de)(de)(de)(de)(de)核(he)心API的(de)(de)(de)(de)(de)一(yi)部(bu)分(fen)。
OpenGL Performer庫(ku)——由SGI開(kai)發(fa)(fa)并可(ke)以在IRIX、Linux和(he)(he)Microsoft Windows的(de)一(yi)些(xie)版(ban)本上使用,構建于(yu)(yu)OpenGL,可(ke)以創(chuang)建實時可(ke)視化仿真程(cheng)(cheng)序。當開(kai)發(fa)(fa)者(zhe)需(xu)要使用最(zui)(zui)新(xin)的(de)OpenGL擴展時,他們往往需(xu)要使用GLEW或(huo)者(zhe)是(shi)GLEE庫(ku)提供的(de)功能(neng),可(ke)以在程(cheng)(cheng)序的(de)運(yun)行期判斷當前(qian)硬(ying)件(jian)是(shi)否支持相關(guan)的(de)擴展,防(fang)止(zhi)程(cheng)(cheng)序崩潰甚(shen)至(zhi)造成硬(ying)件(jian)損(sun)壞。為了(le)加強它的(de)多語(yu)言和(he)(he)多平臺特性(xing),已經用很多語(yu)言開(kai)發(fa)(fa)了(le)OpenGL的(de)各種(zhong)(zhong)綁定和(he)(he)移(yi)植。最(zui)(zui)值得注意的(de)是(shi),Java3D庫(ku)已經可(ke)以利用OpenGL(另一(yi)個選擇可(ke)能(neng)是(shi)DirectX)作(zuo)為它的(de)硬(ying)件(jian)加速了(le)。OpenGL官方網(wang)頁列(lie)出(chu)了(le)用于(yu)(yu)Java、Fortran 90、Perl、Pike、Python、Ada和(he)(he)Visual Basic的(de)多個綁定。OpenGL被設(she)計(ji)為只有輸出(chu)的(de),所以它只提供渲染功能(neng)。核心(xin)API沒有窗口系(xi)統、音(yin)頻、打印、鍵(jian)盤/鼠標或(huo)其他輸入設(she)備的(de)概念。雖然這(zhe)一(yi)開(kai)始看起來像是(shi)一(yi)種(zhong)(zhong)限(xian)制,但它允許(xu)進(jin)行渲染的(de)代碼完全獨立于(yu)(yu)他運(yun)行的(de)操作(zuo)系(xi)統,允許(xu)跨平臺開(kai)發(fa)(fa)。然而,有些(xie)集成于(yu)(yu)原生窗口系(xi)統的(de)東西(xi)需(xu)要允許(xu)和(he)(he)宿主系(xi)統交互(hu)。