opengl高級編程與可視化系統開發
A. opengl是什麼
OpenGL(英語:Open Graphics Library,譯名:開放圖形庫或者「開放式圖形庫」)是用於渲染2D、3D矢量圖形的跨語言、跨平台的應用程序編程介面(API)。這個介面由近350個不同的函數調用組成,用來繪制從簡單的圖形比特到復雜的三維景象。而另一種程序介面系統是僅用於Microsoft Windows上的Direct3D。OpenGL常用於CAD、虛擬現實、科學可視化程序和電子游戲開發。
OpenGL的高效實現(利用了圖形加速硬體)存在於Windows,部分UNIX平台和Mac OS。這些實現一般由顯示設備廠商提供,而且非常依賴於該廠商提供的硬體。開放源代碼庫Mesa是一個純基於軟體的圖形API,它的代碼兼容於OpenGL。但是,由於許可證的原因,它只聲稱是一個「非常相似」的API。
B. OpenGL怎麼學就業能做啥呢
OpenGL就業主要能做3D游戲開發,學習需要一個系統的流程,如下:
openGL學習建議按照如下的步驟進行:
1、基本的線性代數知識,不需要很深入,大學時的線性代數拿出來復習一下足夠用了,特別是矩陣變換部分。
2、C++開發語言,一定要非常熟練。
3、《計算機圖形學》這個應該是高校教材了,這個也是所有圖形學的基礎知識。
4、《3D游戲編程大師技巧》等基礎入門教材,這一類圖書基本上是將基礎知識和openGL API如何使用結合起來,使得讀者可以開始上手開發。同樣的還有 https://learnopengl-cn.github.io/ 這一類網站,都是比較好的入門資料。
5、《openGL編程指南》俗稱「紅寶書」,《OpenGL Super Bible 5th》俗稱「藍寶書」,不過這兩本書更加適合作為查詢手冊,用到哪一塊需要深入了解時進行查詢。
6、再深入就是了解詳細的管線處理流程、shader語言開發等。
openGL主要屬於計算機圖形學方面的內容,這一塊屬於比較專業的領域了。
目前主要做3D游戲開發這一塊用得最多,大公司做游戲引擎開發主要以openGL為主,即便現在很多基於U3D開發的手游,至少也需要熟悉基本的openGL管線流程和一些shader知識。
其次,做一些專業領域的模擬會很多,再次在做各種濾鏡、特效方面也需要用到openGL知識,不過這些方面還需要圖像處理方面的一些知識。

PpenGL的設計
OpenGL規范描述了繪制2D和3D圖形的抽象API。盡管這些API可以完全通過軟體實現,但它是為大部分或者全部使用硬體加速而設計的。
OpenGL的API定義了若干可被客戶端程序調用的函數,以及一些具名整型常量(例如,常量GL_TEXTURE_2D對應的十進制整數為3553)。
雖然這些函數的定義表面上類似於C編程語言,但它們是語言獨立的。因此,OpenGL有許多語言綁定,值得一提的包括:JavaScript綁定的WebGL(基於OpenGL ES 2.0在Web瀏覽器中的進行3D渲染的API);C綁定的WGL、GLX和CGL;iOS提供的C綁定;Android提供的Java和C綁定。
OpenGL不僅語言無關,而且平台無關。規范隻字未提獲得和管理OpenGL上下文相關的內容,而是將這些作為細節交給底層的窗口系統。出於同樣的原因,OpenGL純粹專注於渲染,而不提供輸入、音頻以及窗口相關的API。
OpenGL是一個不斷進化的API。新版OpenGL規范會定期由Khronos Group發布,新版本通過擴展API來支持各種新功能。每個版本的細節由Khronos Group的成員一致決定,包括顯卡廠商、操作系統設計人員以及類似Mozilla和谷歌的一般性技術公司。
除了核心API要求的功能之外,GPU供應商可以通過擴展的形式提供額外功能。擴展可能會引入新功能和新常量,並且可能放鬆或取消現有的OpenGL函數的限制。
然後一個擴展就分成兩部分發布:包含擴展函數原型的頭文件和作為廠商的設備驅動。供應商使用擴展公開自定義的API而無需獲得其他供應商或Khronos Group的支持,這大大增加了OpenGL的靈活性。OpenGL Registry負責所有擴展的收集和定義。
每個擴展都與一個簡短的標識符關系,該標識符基於開發公司的名稱。例如,英偉達(nVidia)的標識符是NV。如果多個供應商同意使用相同的API來實現相同的功能,那麼就用EXT標志符。
這種情況更進一步,Khronos Group的架構評審委員(Architecture Review Board,ARB)正式批准該擴展,那麼這就被稱為一個「標准擴展」,標識符使用ARB。
第一個ARB擴展是GL_ARB_multitexture。
OpenGL每個新版本中引入的功能,特別是ARB和EXT類型的擴展,通常由數個被廣泛實現的擴展功能組合而成。
