OpenGL再虐億遍(firstblood)- 從茫茫多的OpenGL第三方庫講起

作爲OpenGL核心渲染模式的開篇,如果一上來就來一個Hello OpenGL,豈不是很懵逼?!環境都沒配搞什麼Hello OpenGL。衆所周知,OpenGL是一個跨平臺的可編程的三維圖形庫,那麼其跨平臺的特性就離不開一些主要的第三庫的支持。或許你已經接觸過一些OpenGL的基礎知識,想必對以下的一些庫已經有所瞭解:

  • glut
  • freeglut
  • glfw
  • glew
  • glad
  • glm
  • assimp
  • stb_image
  • FreeImage
    等等等等。
    如果已經被掃盲的孩子請跳過,此篇文章不適合您閱讀,請直行。
    如果您對這方面的知識感興趣,那麼請繼續閱讀。

1 OpenGL第三方庫的主要作用

OpenGL從某種意義上來講,是一個被公共定義的顯卡API集合,各家顯卡廠商根據一個設計好的接口規範對各個接口函數進行實現,從而達到一個API接口函數可以在不同架構不同廠商的顯卡上運行並取得高質量的表現。

1.1 窗口與交互

由於目前操作系統的多樣性,導致了OpenGL需要同時對多個操作系統的繪製圖形的外部窗口進行支持,並同時支持鼠標鍵盤對繪製圖形窗口的交互,從而實現場景漫遊等等具有交互式行爲的操作。例如glut、freeglut、glfw就實現了此種功能。

1.2 API更新迭代

目前,OpenGL爲了實現與Dirext3D的對抗,版本迭代的速度越來越快,在多數版本更新的情況下會更新新的API接口函數,那麼用戶操作系統內置的OpenGL版本往往更不上更新的速度,導致一些新版本的API不能被很好的使用,所以這個時候,你只需包含一個跨平臺的第三方庫就可以使用目前OpenGL最新版本的所有API。例如glew、glad就實現了這種功能。

1.3 數學變換與操作

OpenGL作爲三維圖形學的渲染利器,自然少不了複雜的數學操作,比如說矩陣變換,旋轉變換,位移變換等等。我們沒有那麼多的時間去造這種通用的輪子,因爲已經有神幫你造好了。例如glm就實現了這種功能。

1.4 資源加載

在OpenGL實現三維模型瀏覽就需要加載三維模型資源;在OpenGL實現貼圖就需要先把紋理加載進內存資源;在OpenGL實現音樂播放就需要加載音頻…

2 OpenGL比較火熱的第三方庫

2.1 OpenGL與窗口有關的第三方庫

2.1.1 glut

官網:https://www.opengl.org/resources/libraries/glut/

GLUT(以及由此而來的freeglut)負責創建窗口,初始化OpenGL上下文以及處理輸入事件所需的所有系統特定的雜務,以允許可移植的OpenGL程序。只支持32位,並且有內存泄漏風險。

2.1.2 freeglut

官網:http://freeglut.sourceforge.net/

freeglut實際上是對glut的百分百替代,並且執行64位編譯。

2.1.3 glfw

官網:https://www.glfw.org/

GLFW是一個用於臺式機上的OpenGL,OpenGL ES和Vulkan開發的開源,多平臺庫。 它提供了一個簡單的API,用於創建窗口,上下文和表面,接收輸入和事件。

2.2 OpenGL與OpenGLAPI有關的第三方庫

2.2.1 glew

官網:http://glew.sourceforge.net/

glew是跨平臺的開源C/C++擴展加載庫,glew提供了有效的運行時機制,用於確定目標平臺上支持哪些OpenGL擴展。不同的顯卡公司,也會發布一些只有自家顯卡才支 持的擴展函數,你要想用這數涵數,不得不去尋找最新的glext.h,有了GLEW擴展庫,你就再也不用爲找不到函數的接口而煩惱,因爲GLEW能自動識別你的平臺所支持的全部OpenGL高級擴展函數。也就是說,只要包含一個glew.h頭文件,你就能使用gl,glu,glext,wgl,glx的全部函數。

2.2.2 glad

官網:https://glad.dav1d.de/

GLAD是繼GL3W,GLEW之後,當前最新的用來訪問OpenGL規範接口的第三方庫,作用大致與glew相同。

2.3 OpenGL數學運算第三方庫

2.3.1 glm

官網:https://glm.g-truc.net/

OpenGL Mathematics(GLM)是基於OpenGL Shading language(GLSL)規範的只有頭文件的數學庫。GLM提供了使用與GLSL相同的命名約定和功能設計和實現的類和函數。基於GLSL擴展約定的擴展系統提供了擴展功能:矩陣變換,四元數,數據打包,隨機數,噪聲等。該庫可與OpenGL完美配合,但也可確保與其他第三方庫和SDK的互操作性。它是軟件渲染(光線跟蹤/光柵化),圖像處理,物理模擬以及任何需要簡單方便的數學庫的開發環境的理想選擇。GLM用C ++ 98編寫,但是在編譯器支持的情況下可以利用C ++ 11。它是一個不依賴平臺的獨立庫,沒有任何依賴關係。

2.3.2 Eigen

官網:http://eigen.tuxfamily.org/index.php?title=Main_Page

Eigen是用於線性代數的C ++模板庫:矩陣,向量,數值求解器和相關算法。

2.4 OpenGL模型加載第三方庫

2.4.1 Assimp

官網:http://assimp.sourceforge.net/lib_html/
Github:https://github.com/assimp/assimp

assimp是一個用於從各種數據格式加載和處理幾何場景的庫。 該庫不是爲了提高速度而設計的,它主要用於加載與導入各種格式的三維模型文件,並將其轉化爲assimp特定的數據結構,並且這種數據結構非常容易被使用。 assimp還能夠對導入的數據應用各種後處理步驟,例如轉換爲索引網格,計算法線或切線/切線或從右手座標系轉換爲左手座標系。

2.5 OpenGL紋理貼圖加載第三方庫

2.5.1 stb_image.h

Github:https://github.com/nothings/stb

極簡的圖片文件加載頭文件,一個頭文件就支持加載多種格式圖片文件。

2.5.2 FreeImage

官網:https://freeimage.sourceforge.io/

FreeImage是一個開源庫項目,面向希望支持當今多媒體應用程序所需的流行圖形圖像格式(如PNG,BMP,JPEG,TIFF和其他格式)的開發人員。 FreeImage易於使用,快速,多線程安全,與所有32位或64位版本的Windows兼容以及跨平臺(適用於Linux和Mac OS X)。

3 如何合理搭配OpenGL的第三方庫

  • 如果你以前經常使用OpenGL立即渲染模式也就是OpenGL3.3之前版本的,沒有進行過shader編程過的同學,想進行OpenGL核心模式的學習,那麼freeglut中關於窗口與交互操作的API可以作爲你的首選,當然你必須從glew和glad中選一個來訪問OpenGL新的規範接口。其中freeglut用於管理渲染窗口與交互,glew或glad負責新規範接口的訪問。
  • 如果你是剛接觸OpenGL的,那麼從新的glfw+glew或者glfw+glad開始是一個不錯的選擇,反正都要從頭開始,何不上最新的呢?其中glfw用於管理渲染窗口與交互,glew或glad負責新規範接口的訪問。
  • 我的建議:如果可以的話,可以嘗試glfw+glad的搭配。

作爲OpenGL可編程渲染管線的一血,希望能夠使大家對OpenGL這麼多第三方庫的大致的瞭解與認識。

如果大家有興趣,可以訪問我的個站:http://www.stubbornhuang.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章