什么是OpenGL
2020-07-19 19:08:48
供稿:網(wǎng)友
什么是OpenGL
OpenGL是OpenGraphicsLib的縮寫,是一套三維圖形處理庫(kù),也是該領(lǐng)域的工業(yè)標(biāo)準(zhǔn)。計(jì)算機(jī)三維圖形是指將用數(shù)據(jù)描述的三維空間通過(guò)計(jì)算轉(zhuǎn)換成二維圖像并顯示或打印出來(lái)的技術(shù)。
OpenGL就是支持這種轉(zhuǎn)換的程序庫(kù),它源于SGI公司為其圖形工作站開(kāi)發(fā)的IRIS GL,在跨平臺(tái)移植過(guò)程中發(fā)展成為OpenGL。SGI在1992年7月發(fā)布1.0版,后成為工業(yè)標(biāo)準(zhǔn),由成立于1992年的獨(dú)立財(cái)團(tuán)OpenGL Architecture Review Board (ARB)控制。SGI等ARB成員以投票方式產(chǎn)生標(biāo)準(zhǔn),并制成規(guī)范文檔(Specification)公布,各軟硬件廠商據(jù)此開(kāi)發(fā)自己系統(tǒng)上的實(shí)現(xiàn)。只有通過(guò)了ARB規(guī)范全部測(cè)試的實(shí)現(xiàn)才能稱為OpenGL。1995年12月ARB批準(zhǔn)了1.1版本,最新版規(guī)范是1999.5通過(guò)的1.2.1。
OpenGL被設(shè)計(jì)成獨(dú)立于硬件,獨(dú)立于窗口系統(tǒng)的,在運(yùn)行各種操作系統(tǒng)的各種計(jì)算機(jī)上都可用,并能在網(wǎng)絡(luò)環(huán)境下以客戶/服務(wù)器模式工作,是專業(yè)圖形處理、科學(xué)計(jì)算等高端應(yīng)用領(lǐng)域的標(biāo)準(zhǔn)圖形庫(kù)。它低端應(yīng)用上的主要競(jìng)爭(zhēng)對(duì)手是MS-Direct3D,該圖形庫(kù)是以COM接口形式提供的,所以極為較復(fù)雜,穩(wěn)定性差,另外微軟公司擁有該庫(kù)版權(quán),目前只在Windows平臺(tái)上可用。D3D的優(yōu)勢(shì)在速度上,但現(xiàn)在低價(jià)顯卡都能提供很好的OpenGL硬件加速,所以做3D使用Direct3D已沒(méi)有特別的必要,在專業(yè)圖形處理特別是高端應(yīng)用方面目前還沒(méi)有出現(xiàn)以Direct3D技術(shù)為基礎(chǔ)的例子,而游戲等低端應(yīng)用也有轉(zhuǎn)向OpenGL的趨勢(shì)。
微軟在Windows NT對(duì)OpenGL的支持始于3.51,在Windows9x中的支持始于Win95 OEM Service Release 2。Windows下常用的OpenGL庫(kù)有兩種,MS實(shí)現(xiàn)的和SGI實(shí)現(xiàn)的,MS-OpenGL調(diào)用會(huì)自動(dòng)檢測(cè)是否存在顯示卡制造商提供的ICD(Installable Client DeviceDriver)驅(qū)動(dòng)程序,有則調(diào)用ICD中的例程,否則才用CPU進(jìn)行計(jì)算,所以能利用顯示卡的OpenGL加速能力。對(duì)開(kāi)發(fā)者來(lái)說(shuō)使用方法并沒(méi)有區(qū)別,只是有ICD驅(qū)動(dòng)時(shí)更快些。SGI的版本是純軟件實(shí)現(xiàn)不能利用硬件加速并且SGI已經(jīng)在1999年宣布停止支持,但這套庫(kù)便于調(diào)試程序,仍有不少開(kāi)發(fā)者使用。
SGI曾經(jīng)宣布研發(fā)OpenGL ,該圖形庫(kù)最大的特點(diǎn)是面象對(duì)象,提供了樹(shù)形場(chǎng)景支持,大大減省了使用OpenGL處理復(fù)雜場(chǎng)景的工作量。后來(lái)(1999)SGI宣布與M$合作開(kāi)發(fā)Ferihant,即Windows的下一代圖形處理體系,包括DirectX與OpenGL的低級(jí)圖形處理接口和以場(chǎng)景圖支持為特點(diǎn)的高級(jí)接口,并且就此停止對(duì)其在Windows下的OpenGL實(shí)現(xiàn)的支持以示決心。此舉世矚目,大家都以為Windows圖形處理快要過(guò)上幸福生活了,然而,不久,SGI宣布中止合作,并撤回派出的科學(xué)家,F(xiàn)erihant基本上夭折。SGI 稱終止合作的原因是M$不肯積極合作,光想把SGI 的技術(shù)合并進(jìn)DirectX,真正內(nèi)幕不詳。不過(guò)以SGI在圖形處理界的老大地位來(lái)說(shuō),還是有幾分可信度的,因?yàn)镸$初支持OpenGL就不積極。
雖然早在WinNT3.51 時(shí)代M$就已經(jīng)實(shí)現(xiàn)了它的OpenGL 版本,但不肯隨其Windows95 時(shí)提供,稱該API 適合高端應(yīng)用,而Win95面向一般消費(fèi)者的用不到,并且在其win3.x下開(kāi)發(fā)的wing 圖表庫(kù)的基礎(chǔ)上搞出了GameSDK,即后來(lái)的DirectX 庫(kù),稱這套庫(kù)是專門為高性能游戲開(kāi)發(fā)設(shè)計(jì)的,在當(dāng)時(shí)的硬件條件下,這無(wú)疑是非常有道理的,并且很快成為Windows環(huán)境下游戲開(kāi)發(fā)的標(biāo)準(zhǔn)API 。該庫(kù)實(shí)質(zhì)上是提供了繞過(guò)Windows 直接訪問(wèn)顯存的途徑,從而很好的解決了GDI 體系性能方面的不足,但由于是以COM接口形式提供的,所以相當(dāng)復(fù)雜,而穩(wěn)定性也不是很好,所以有人稱Direct3D 是為追求速度而不擇手段的公司才用的。然而也就在這個(gè)時(shí)期,三維圖形加速卡開(kāi)始走向商用和家用,也就是在這時(shí)期S3公司以其性價(jià)比極高的帶三維圖形加速的顯示芯片、板卡向當(dāng)時(shí)Trident 公司的霸主地位發(fā)起了挑戰(zhàn)。另外這時(shí)實(shí)時(shí)三維游戲開(kāi)始流行,以Dos 下的第一人稱射擊游戲――暗殺希特勒(3d worlf) 大獲成功、紅極一時(shí)ID Software 的開(kāi)始鑄輝煌,推出了Doom 、Quake1 ,相信這兩個(gè)名字在今天(2000.4) 的游戲圈子里應(yīng)該是無(wú)人不知無(wú)不曉吧?1996.12.ID Software 的高手John Carmack 在開(kāi)發(fā)下一代三維圖形引擎時(shí)在其.plan 中寫上了以下字句:
Direct-3D IM is a horribly broken API. It inflicts great pain and suffering on the programmers using it, without returning any significant advantages. I don’t think there is ANY market segment that D3D is apropriate for, OpenGL seems to work just fine for everything from quake to softimage. There is no good technical reason for the existance of D3D.
I’m sure D3D will suck less with each forthcoming version, but this is an oportunity to just bypass dragging the entire development community through the messy evolution of an ill-birthed API.
此后以他為代表的一大批游戲開(kāi)發(fā)人員開(kāi)始多方呼吁MS積極支持OpenGL。M$終于在Win95的OSR2版本里集成了OpenGL,并為以前版本的Win95免費(fèi)提供單獨(dú)的OpenGL實(shí)現(xiàn)。(或許您還不了解這些人的影響力,不知道您聽(tīng)說(shuō)過(guò)以生產(chǎn)Voodoo系統(tǒng)圖形加速卡而著稱于世的3dfx公司嗎?當(dāng)年Quake的開(kāi)發(fā)者不肯用Voodoo的glide API對(duì)voodoo做優(yōu)化版本,差點(diǎn)沒(méi)把3dfx嚇蒙,于是趕緊搞了一個(gè)針對(duì)游戲的OpenGL子集:MiniGL,讓ID Software的人只要在制作OpenGL時(shí)只使用MiniGL API做過(guò)優(yōu)化就成,這樣Quake總算可以用上voodoo的硬件加速能力了。這樣也造就了一個(gè)新名詞:MCD--MiniGL Client Driver,用于Windows的MiniGL驅(qū)動(dòng)程序,而標(biāo)準(zhǔn)的OpenGL則依靠ICD驅(qū)動(dòng))。