OpenGL
OpenGL(全寫Open Graphics Library)是個定義了一個跨程式語言、跨平台的編程接口(Application programming interface)的規格,它用於生成二維、三維圖像。這個接口由近三百五十個不同的函式調用組成,用來從簡單的圖元繪製複雜的三維景象。而另一種編程接口系統是僅用於Microsoft Windows上的Direct3D。OpenGL常用於CAD、虛擬實境、科學可視化程式和電子遊戲開發。OpenGL的高效實現(利用了圖形加速硬體)存在於Windows,很多UNIX平台和MacOS。這些實現一般由顯示設備廠商提供,而且非常依賴於該廠商提供的硬體。開放原始碼庫Mesa是一個純基於軟體的圖形API,它的代碼兼容於OpenGL。但是,由於許可證的原因,它只聲稱是一個“非常相似”的API。
OpenGL規範由1992年成立的OpenGL架構評審委員會(ARB)維護。ARB由一些特別興趣於創建一個統一的普遍可用的API的公司組成。根據OpenGL官方網站,2002年6月的ARB投票成員包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans & Sutherland、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和Sun Microsystems(Microsoft曾是創立成員之一,但已於2003年3月退出)。
擴展
當獨立廠商創建一種新技術時,OpenGL標準允許它們通過“擴展”的方法提供所擴展的功能。然後一個擴展就分成兩部分發布:包含擴展函式原型的頭檔案和作為廠商的設備驅動。每個廠商有一個用於命名它們的新函式和常量的字母縮寫。例如,NVIDIA的縮寫(“NV”)用於定義它們的專有函式“glCombinerParameterfvNV()”和它們的常量“GL_NORMAL_MAP_NV”。如果多於一個廠商同意實現相同的擴展功能,那么就用縮寫“EXT”。進一步,架構評審委員會可能“祝福”這個擴展,那么這就被稱為一個“標準擴展”,使用縮寫“ARB”。第一個ARB擴展是GL_ARB_multitexture。根據官方擴展提升路徑,多紋理不再是可選實現的ARB擴展,它已經是OpenGL 1.4以後的核心API的一部分。幾個庫創建在OpenGL之上,提供了OpenGL本身沒有的功能:
GLUGLUTGLUIGLEWGLEE特別是,OpenGL Performer庫——由SGI開發並可以在IRIX、Linux和Microsoft Windows的一些版本上使用,構建於OpenGL,可以創建實時可視化仿真程式。
當開發者需要使用最新的OpenGL擴展時,他們往往需要使用GLEW或者是GLEE庫提供的功能,可以在程式的運行期判斷當前硬體是否支持相關的擴展,防止程式崩潰甚至造成硬體損壞。
不同的平台
OpenGL是個與.硬體無關的軟體接口,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之間進行移植。因此,支持OpenGL的軟體具有很好的移植性,可以獲得非常廣泛的套用。由於 OpenGL是3D圖形的底層圖形庫,沒有提供幾何實體圖元,不能直接用以描述場景。但是,通過一些轉換程式,可以很方便地將AutoCAD、3DS等 3D圖形設計軟體製作的DFX和3DS模型檔案轉換成OpenGL的頂點數組。在OpenGL的基礎上還有Open Inventor、Cosmo3D、Optimizer等多種高級圖形庫,適應不同套用。其中,Open Inventor套用最為廣泛。該軟體是基於OpenGL面向對象的工具包,提供創建互動式3D圖形應用程式的對象和方法,提供了預定義的對象和用於互動的事件處理模組,創建和編輯3D場景的高級應用程式單元,有列印對象和用其它圖形格式交換數據的能力。完善
高級功能
OpenGL被設計為只有輸出的,所以它只提供渲染功能。核心API沒有視窗系統、音頻、列印、鍵盤/滑鼠或其他輸入設備的概念。雖然這一開始看起來像是一種限制,但它允許進行渲染的代碼完全獨立於他運行的作業系統,允許跨平台開發。然而,有些集成於本地視窗系統的東西需要允許和宿主系統互動。這通過下列附加API實現:GLX - X11(包括透明的網路)WGL - Microsoft Windows另外,GLUT庫能夠以可移植的方式提供基本的視窗功能。
完善
OpenGL的發展一直處於一種較為遲緩的態勢,每次版本的提高新增的技術很少,大多只是對其中部分做出修改和完善。1992年7月,SGI公司發布了 OpenGL的1.0版本,隨後又與微軟公司共同開發了Windows NT版本的OpenGL,從而使一些原來必須在高檔圖形工作站上運行的大型3D圖形處理軟體也可以在微機上運用。1995年OpenGL的1.1版本面市,該版本比1.0的性能有許多提高,並加入了一些新的功能。其中包括改進印表機支持,在增強元檔案中包含OpenGL的調用,頂點數組的新特性,提高頂點位置、法線、顏色、色彩指數、紋理坐標、多邊形邊緣標識的傳輸速度,引入了新的紋理特性等等。OpenGL 1.5又新增了“OpenGL Shading Language”,該語言是“OpenGL 2.0”的底核,用於著色對象、頂點著色以及片斷著色技術的擴展功能。OpenGL 2.0標準的主要制訂者並非原來的SGI,而是逐漸在ARB中占據主動地位的3Dlabs。2.0版本首先要做的是與舊版本之間的完整兼容性,同時在頂點與像素及記憶體管理上與DirectX共同合作以維持均勢。OpenGL 2.0將由OpenGL 1.3的現有功能加上與之完全兼容的新功能所組成(如圖一)。藉此可以對在ARB停滯不前時代各家推出的各種糾纏不清的擴展指令集做一次徹底的精簡。此外,硬體可程式能力的實現也提供了一個更好的方法以整合現有的擴展指令。
目前,隨著DirectX的不斷發展和完善,OpenGL的優勢逐漸喪失,至今雖然已有3Dlabs提倡開發的2.0版本面世,在其中加入了很多類似於DirectX中可程式單元的設計,但廠商的用戶的認知程度並不高,未來的OpenGL發展前景迷茫。