跨平台的代表-OpenGL
OpenGL 最早發佈於 1992 年 01 月 (距離個人電腦進入 3D 圖形加速時代還有好幾年的時間),一開始是由 SGI 發展,主要是當時 SGI 將自家的 IRIS GL 簡化與整理後的產物,因此 OpenGL 早期的版本與 IRIS GL 有著頗高的相似度。
OpenGL 與 IRIS GL 初期主要的差異是將 IRIS GL 內與 3D 圖形較無關聯或牽涉到授權協議的部分移除 (例如鍵盤、滑鼠與視窗 API 等) 並改為開放標準,並且在文件的完善程度與標準化、一致性上比起 IRIS GL 來說有了大幅度的改進,這些因素加上 PHIGS 先天的一些弱點與使用上的困難,使得 OpenGL 得以在之後徹底擊敗 PHIGS,成為 3D 圖形中主流的 API 之一,至於原有的 IRIS GL 則轉型成為工業標準且維持私有授權的 OpenGL 特殊用途版本。
時至今日,OpenGL 仍然幾乎可以說是唯一能夠橫跨各大平台的即時 3D 圖形標準,用於嵌入式裝置的特殊版本 OpenGL-ES 更是廣泛地受到手機等行動裝置的支援。
Windows 限定-DirectX
有在玩遊戲的人應該對 DirectX 這個名詞不陌生吧?DirectX 是微軟在 1995 年為了提高開發者針對 Windows 9x 平台製作多媒體程式的意願 (因為在 Windows 底下直接命令硬體做事不如在 DOS 底下容易) 而設計的「一大票」API 的總稱,從 Windows 95 OSR2 開始內建至系統中,成為重要系統元件之一。
DirectX 的全稱是 Direct eXtensions,顧名思義是用來向開發者提供讓它們得以直接透過程式對硬體下達指令,讓開發難度合理地降低並解決在 Windows 3.1 時代使用 WinG API 時多媒體程式效率不彰且不穩定的問題,並取代 Windows 3.x 下僅有存取畫面緩衝區 (Frame Buffer) 功能的 DCI (Display Control Interface)。
DirectX 在 2006 年以前主要由下面這些元件組成:
- Direct3D
用於 3D 圖形即時繪圖,接下來我們主要討論的重點大多在這裡。 - DirectDraw
用於 2D 圖形即時繪圖。 - DirectSound
用於播放與錄製音訊,與音效卡比較有關。 - DirectInput
用於處理鍵盤、滑鼠或搖桿等輸入裝置的介面。 - DirectPlay
用於提供區域網路或網際網路間的通訊服務。 - DirectMusic
建立在 DirectSound 的基礎上,主要用於方便使用硬體加速功能撥放與製作一些音效效果。
早期的 DirectX 在推廣上並沒有很順利,某種程度上是因為當時的開發者們擔心 DirectX 最後會不會如同 WinG 一樣被微軟快速地放棄,因此即便 Direct3D 早在 DirectX 2.0 中就已經出現,但採用的軟體其實並不多,主要還是以 OpenGL 為主,DirectX 真正要被開發者接受要等到 1997 年的 DirectX 3.0 (下圖就是以 DirectX 3.0 製作的遊戲)。
當時微軟內部的定位是將 OpenGL 視為專業高性能、高畫質工作站的圖形運算解決方案 (僅內建於 Windows NT,但 Windows 95 可以透過安裝套件補上),DirectX 的目標市場則是較為輕量化、主要用於消費性市場的解決方案 (主要由 Windows 95 部門推行,但 Windows NT 也支援),一方面也確實由於 DirectX 的多媒體功能較豐富,但 OpenGL 的繪圖演算功能較強,彼此各有長處因此 DirectX 與 OpenGL 之間的競爭還不算太激烈。
而隨著 OpenGL 逐步補強自己在多媒體功能方面的不足,DirectX 也將自己的繪圖演算功能不斷強化,兩者之間的競爭難免逐漸浮上檯面,但這次微軟一反常態的並未利用在 Windows 的市占率來讓開發者轉向 DirectX,反而是選擇對 OpenGL 提供支援,這讓開發者得以同時混用兩大陣營的 API,例如使用 OpenGL 進行圖形渲染卻搭配 DirectInput 來處理搖桿輸入的部分。
至於具備 DirectX 硬體加速能力的圖形加速卡則主要是從 1997 年的 DirectX 5.0 開始大量出現的 (DirectX 4.0 與 5.0 同時間開始開發,但由於 DirectX 4.0 的改進內容有限因此沒有太多廠商感興趣,最終被微軟直接跳過),而第一批圖形加速卡大多不支援 OpenGL,主要原因就是前面提過的定位問題。
至今 DirectX 仍然是 Windows 系統的重要核心元件之一,不過架構設計與內容和早期版本已有相當大程度的不同。