跳轉到內容

OpenGL 程式設計/3D/歷史

來自華夏公益教科書,開放世界的開放書籍

早期歷史

[編輯 | 編輯原始碼]

IrisGL 是一種專有的圖形 API,是 OpenGL 的前身。由當時計算機圖形市場領導者矽谷圖形公司 (SGI) 開發的 IrisGL 被用作計算機圖形開放標準的起點,該標準透過避免直接硬體訪問來節省應用程式移植時間。SGI 清理了 IrisGL 並將其標準開放給其他公司後,OpenGL 誕生了。

1992 年,OpenGL 架構審查委員會 (OpenGL ARB) 成立。OpenGL ARB 是一個公司組成的團體,負責維護和更新 OpenGL 標準。

擴充套件及其相關性

[編輯 | 編輯原始碼]

Android 擴充套件包[1] 是 Google 標準化的 OpenGL 擴充套件子集,超出了 OpenGL 3.1 規範中描述的核心集。它激勵裝置製造商和驅動程式供應商提供這些擴充套件,隨後激勵開發人員使用它們。

OpenGL 和 Direct3D

[編輯 | 編輯原始碼]

關於哪種實現比另一種更好,一直存在著巨大的爭論,沒有定論。這兩個 API 都用於實現相同的效果,爭論哪個更快或產生更好的結果是毫無意義的辯論。另請注意,Direct3D 是 DirectX 的一部分,將 OpenGL 與 DirectX 進行比較沒有實際意義。

OpenGL 和 Direct3D 之間的區別

[編輯 | 編輯原始碼]

OpenGL 是一個開放標準,這意味著任何希望實現它的人都可以獲得其詳細資訊。如 OpenGL 簡介中所述,幾個方面參與了 OpenGL 的發展。Direct3D 是專有軟體,這意味著其所有者(微軟)是唯一擁有其詳細資訊的人,也是唯一能夠改變其發展方向的實體。

OpenGL 是跨平臺的。幾乎所有計算機裝置都實現了此 API。用 OpenGL 編寫的圖形引擎理論上可以在任何這些硬體(PC、MAC、遊戲機、手機……)上執行。DirectX 僅限於微軟。用 DirectX 編寫的引擎只能在微軟的作業系統上執行。

事實與謬誤

[編輯 | 編輯原始碼]

Direct3D 比 OpenGL 快/慢

[編輯 | 編輯原始碼]

在相同條件下,兩種實現都將以相同的速度執行,因為它們都由相同的圖形驅動程式實現。任何效能差異都是基於有缺陷的圖形驅動程式,而不是 API 本身。通常,比較在 Windows 上使用 Direct3D 執行的遊戲(如《敵軍總部》或《虛幻》系列)和在 Linux 上使用 OpenGL 執行的遊戲,會發現其中一個比另一個執行更快,但這並非有效的比較,因為執行測試的環境不同。

OpenGL 已被 Direct3D 超越,沒有未來

[編輯 | 編輯原始碼]

這就像說除了微軟的作業系統之外,不會再有其他作業系統。只要有幾個作業系統(不僅僅是計算機),OpenGL 就將存在。

OpenGL 比 Direct3D 更/不強大

[編輯 | 編輯原始碼]

同樣,兩種實現都依賴於圖形驅動程式。兩種實現都將始終在相同硬體上具有相同的功能。

OpenGL 在這些年裡經歷了巨大的變化,有很多過時的誤導性建議

[編輯 | 編輯原始碼]

這個是真的。

以上資源中的一些在今天已經過時了。

在 OpenGL 中通常有幾種完成給定任務的方法,它們的速度不同

[編輯 | 編輯原始碼]

同樣,這個是真的。首選(更快)的方法被稱為“快速路徑”。

OpenGL 的現代化是企業陰謀,目的是壓倒獨立遊戲開發者

[編輯 | 編輯原始碼]
你如何期望任何獨立開發者有時間和資源來處理這種複雜情況?OpenGL之所以成功是因為它很簡單,但在經過多年的企業干預後,它變成了DirectX。擁抱,擴充套件和消滅的最佳體現。
—lennyhome

這是一個錯誤的解釋。更實用的解釋是,OpenGL 從一個高階的 3D 圖形 API 變成了一個用於程式設計 GPU 的跨平臺相容層。從某種意義上說,現代 OpenGL 只是一個 2D API[2]。如果你是一名需要完整 3D API 的遊戲開發者,直接使用 OpenGL 可能不適合你。相反,專注於你製作遊戲本身的核心競爭力,並使用現有的遊戲引擎(或更高層的圖形 API,例如 three.js)來進行圖形渲染和其他所有不構成你軟體核心部分的方面。

現在和未來

[編輯 | 編輯原始碼]

2003 年釋出了第一個 OpenGL ES 規範。OpenGL ES 是 OpenGL 的一個子集,專為行動電話、嵌入式裝置和影片遊戲系統而設計。

2004 年釋出了 OpenGL 2.0 規範,包括 GLSL(OpenGL Shading Language)規範。

2008 年 8 月釋出了 OpenGL 3.0 規範。

  1. https://developer.android.com/guide/topics/graphics/opengl.html#aep
  2. http://games.greggman.com/game/webgl-2d-vs-3d-libraries/
華夏公益教科書