OpenGL(Open Graphics Library)是一個(gè)跨平臺(tái)、跨語言的圖形編程接口(API)。它被廣泛用于實(shí)現(xiàn)2D和3D圖形渲染,并且是許多應(yīng)用程序、游戲和網(wǎng)頁瀏覽器的核心組件,可以參考:https://pan.baidu.com/s/1BTM5PjAAOpeQFP-a5IO0VA 提取碼:p9bg 。
一、OpenGL的主要特性
1. 低層次的渲染 API:OpenGL 提供了直接與圖形硬件進(jìn)行交互的能力。這使得它非常強(qiáng)大,因?yàn)樗梢猿浞掷脠D形處理器(GPU)的性能。然而,這也意味著使用 OpenGL 需要對(duì)計(jì)算機(jī)圖形學(xué)有深入的理解。
2. 狀態(tài)機(jī):OpenGL 是一個(gè)狀態(tài)機(jī),這意味著你可以通過一系列的函數(shù)調(diào)用來改變它的內(nèi)部狀態(tài),然后這些狀態(tài)會(huì)影響后續(xù)的渲染操作。
3. 可擴(kuò)展性:OpenGL 的一個(gè)重要特性是它的可擴(kuò)展性。硬件制造商可以為他們的硬件特性定義新的 OpenGL 函數(shù)和參數(shù)。這些擴(kuò)展可以通過 OpenGL 的擴(kuò)展機(jī)制被查詢和使用。
4. 跨平臺(tái)和跨語言:OpenGL 可以在所有主要的操作系統(tǒng)(如 Windows、macOS 和 Linux)上運(yùn)行,并且有各種編程語言的綁定,包括 C、C++、Python、Java 和許多其他語言。
5. 顯示列表和著色器:OpenGL 提供了兩種主要的方式來指定如何渲染圖形。一種是通過使用顯示列表來指定一系列的頂點(diǎn)和參數(shù)。另一種是通過使用著色器,這是一種在 GPU 上運(yùn)行的小程序,可以控制圖形的最終顏色和位置。
二、OpenGL 設(shè)計(jì)結(jié)構(gòu)
如果用一句話來描述 OpenGL 的話,我想應(yīng)該是基于C/S結(jié)構(gòu)設(shè)計(jì)的模板模式(設(shè)計(jì)模式里的那個(gè));在 圖形渲染管線 這節(jié),主要介紹的是其模板設(shè)計(jì),在 OpenGL 里我們稱之為 PipeLine;在 C/S結(jié)構(gòu) 這節(jié),則介紹 OpenGL C/S 結(jié)構(gòu)給 OpenGL 帶來的一些對(duì)于初學(xué)者看起來可能覺得奇奇怪怪的東西.
三、核心模式與立即渲染模式:
早期OpenGL使用立即渲染(Immediate mode,也就是固定渲染管線)容易使用和理解,但是效率太低。從OpenGL3.2開始廢棄立即渲染模式,鼓勵(lì)使用核心模式(Core-profile)。
核心模式:要求使用者真正理解OpenGL和圖形編程,有一些難度,然而提供了更多的靈活性,更高的效率,可以更深入理解圖形編程。
擴(kuò)展:
OpenGL的一大特性就是對(duì)擴(kuò)展(Extension)的支持,當(dāng)一個(gè)顯卡公司提出一個(gè)新特性或者渲染上的大優(yōu)化,通常會(huì)以擴(kuò)展的方式在驅(qū)動(dòng)中實(shí)現(xiàn)。
狀態(tài)機(jī):
OpenGL自身是一個(gè)巨大的狀態(tài)機(jī)(State Machine):一系列的變量描述OpenGL此刻應(yīng)當(dāng)如何運(yùn)行。OpenGL的狀態(tài)通常被稱為OpenGL上下文(Context)。我們通常使用如下途徑去更改OpenGL狀態(tài):設(shè)置選項(xiàng),操作緩沖。最后,我們使用當(dāng)前OpenGL上下文來渲染。
四、OpenGL和DirectX哪個(gè)好
選擇OpenGL還是DirectX取決于你的具體需求和目標(biāo)平臺(tái)。
OpenGL的優(yōu)點(diǎn)包括:
成為繪圖引擎的標(biāo)準(zhǔn),繪圖質(zhì)量高,編程相對(duì)復(fù)雜但上手簡(jiǎn)單,適合追求完美的繪圖精確度。
跨平臺(tái)支持,可以在多個(gè)操作系統(tǒng)上使用,包括Windows、Linux和Mac等。
易于學(xué)習(xí)和使用,特別是對(duì)于初學(xué)者來說,OpenGL的C語言接口相對(duì)簡(jiǎn)單。
提供了各種輔助庫,可以用于往其他設(shè)備上輸出數(shù)據(jù),如打印機(jī)。
向下兼容性好,高版本的OpenGL程序如果不使用新特性,可以容易地改用在低版本的機(jī)器上運(yùn)行。
DirectX的優(yōu)點(diǎn)包括:
專為游戲而生,繪圖精度滿足一般游戲的所需,包含了不少用來在游戲中處理其他數(shù)據(jù)的輔助庫,包括聲音數(shù)據(jù)、輸入輸出等。
主要使用C++編程語言,更適合利用面向?qū)ο蟮奶匦赃M(jìn)行開發(fā)。
提供了一整套用于游戲開發(fā)的API,包括Direct3D用于3D圖形渲染、Direct2D用于2D圖形渲染等。
與Windows緊密相連,難以移植,但提供了強(qiáng)大且方便的IDE和GPU語言調(diào)試工具。
五、OpenGL就業(yè)前景
圖形學(xué)基礎(chǔ)知識(shí)本來就不多,而且沒有太大變化,就是很多特效可能時(shí)不時(shí)出一個(gè)新論文,但實(shí)際變化不大。如果你單純學(xué)點(diǎn)圖形學(xué)會(huì)點(diǎn)opengl dx,就想很容易找到工作,那是不現(xiàn)實(shí)的:要每天都玩圖形學(xué),一般都進(jìn)顯卡公司,圖形芯片研發(fā),渲染架構(gòu)算法驗(yàn)證,圖形驅(qū)動(dòng)開發(fā),就比如基礎(chǔ)的驅(qū)動(dòng)開發(fā),你至少要會(huì)寫windows驅(qū)動(dòng),光學(xué)圖形學(xué)肯定沒用。
要做游戲,游戲引擎甚至需要的圖形學(xué)知識(shí)很少,基礎(chǔ)圖形學(xué)完全足夠,游戲引擎更著重的是全套工具鏈和細(xì)節(jié)性能優(yōu)化,尤其是全套工具鏈,游戲開發(fā)需要很多各種功能,場(chǎng)景編輯 動(dòng)畫 骨骼 地形天空 基礎(chǔ)特效光照粒子系統(tǒng) 資源管理 狀態(tài)機(jī)行為樹 性能監(jiān)控調(diào)試 drawcall調(diào)試 格式轉(zhuǎn)換導(dǎo)入 插件 腳本等等。游戲開發(fā)大部分都是體力活,除非是細(xì)節(jié)特效,可能需要圖形學(xué)專業(yè)點(diǎn)寫高性能shader。
從學(xué)習(xí)的角度來看,opengl有著足夠好的教程,并且從上手難度來說opengl是比較好上手的,能夠快速讓你得到正反饋并且繼續(xù)學(xué)下去。有了一定基礎(chǔ)后續(xù)學(xué)習(xí)現(xiàn)代圖形API也可以更快上手。
從就業(yè)的角度來看,opengl現(xiàn)在在就業(yè)市場(chǎng)上還是有著不少的崗位的。但是現(xiàn)代圖形API是大勢(shì)所趨,后續(xù)應(yīng)該會(huì)有更多的崗位,如果為了就業(yè)學(xué)opengl沒問題,不過最好也一邊學(xué)習(xí)現(xiàn)代圖形API