工作中越來越多的需求是要將數據以3D的形式展示給用戶,但是在實現3D特效之前,都需要有一個準備階段。OpenGL規範描述了繪製2D和3D圖形的抽象API,正所謂「工欲善其事必先利其器」,所以,學習OpenGL之前,當然是需要搭建好運行的環境。
今年的目標就是熟練掌握好OpenGL的入門知識,之前由於工作的原因,遲遲無法開展,今天終於抽空搭建好了OpenGL環境。
搭建OpenGL環境過程中,也是花費了不少時間,特別是基於cmake來搭建OpenGL的環境,網絡上的資料很少,並且也沒找到成功的例子,因此,這裡將搭建的過程分享出來。希望能夠對大家有一定的參考價值。
本文首先會介紹搭建OpenGL環境之前的準備條件,然後再總體說明搭建的流程,接著再針對每個流程進行詳細的說明。這裡不會涉及太多專業術語,本文的目的就是要快速搭建好環境,方便後續的學習和工作的開展。
一、準備條件
本文OpenGL環境是在mac系統搭建,並且採用cmake來組織編譯環境,使用的IDE工具是QtCreator 4.9.1, mac作業系統的版本是10.13.6。
搭建opengl環境的大致步驟為,構建glfw、構建glad, 連結系統自帶的OpenGL庫。
glfw的作用是創建OpenGL上下文、定義窗口參數以及處理用戶輸入。
glad根據版本加載所有相關的OpenGL函數。
OpenGL庫則是實現了實現了規範的抽象API的集合。
二、創建工程
使用qtcreator工具來創建C++工程,工程名稱為StudyOpengl
然後選擇cmake來編譯系統,其他按照默認進行操作即可
三、構建GLFW
官方網站上下載glfw的原始碼包,其代碼的目錄結構如下圖所示
然後使用qtcreator來打開glfw原始碼包中的CMakeLists.txt, 目的就是使用qtcreator來編譯glfw代碼,並生成靜態庫。
加載成功glfw的工程目錄
選中工程根目錄,然後右鍵彈出的菜單,點擊「構建」選項
如果編譯成功,那麼在編譯目錄下能夠看到名稱為libglfw3的靜態庫
最後將glfw的頭文件和靜態庫拷貝到工程StudyOpengl下,到這裡,glfw的構建工作已經完成,後面還需要添加glfw的頭文件和庫的搜索路徑,這個等到整體編譯的時候,再統一進行說明。
四、構建GLAD
構建glad, 為了方便,我們這裡直接使用網絡上提供的在線服務來進行創建,具體的在線服務可以網絡上進行搜索。
進入glad的在線服務頁面如下所示,語言選擇C/C++, API版本選擇最新的為4.6, Profile下選擇Core
拖動頁面到最底部,勾選「Generate a loader」選項,然後點擊「GENERATE」
等待片刻,即可生成glad的壓縮包,將壓縮包裡面的include文件夾和glad.c文件拷貝到工程StudyOpengl, 至此,glad的構建工作也完成,添加頭文件和庫的搜索路徑也等到整體編譯的時候,再統一說明。
五、連結OpenGL
連結OpenGL,我覺得是最重要的一步,這是自己摸索出來的解決方法。這裡連結是mac系統自帶的opengl庫。
項目工程StudyOpengl中的CMakeLists.txt文件中,添加搜索OpenGL庫的路徑,創建變量來保存Cocoa、CoreVideo、IOKit的庫路徑
接著添加opengl的頭文件搜索路徑
最後將OpenGL、Cocoa、CoreVideo、IOKit的庫連結到工程。
六、整體編譯
cmake文件增加glad和glfw的頭文件搜索路徑,首先創建函數include_sub_directories_recursively,該函數的功能是遞歸的將輸入路徑下的所有目錄添加到頭文件的搜索路徑
添加完成頭文件的搜索路徑之後,接下來就來添加庫的搜索路徑,同樣的,實現函數link_sub_directories_recursively用於將輸入路徑下的所有目錄都添加到庫的搜索路徑中。
最後記得將libglfw3.a的靜態庫連結到工程中
為了測試環境是否生效,使用網絡上一位大神寫的代碼來進行測試,直接將以下代碼拷貝到main.cpp文件。
不出意外的話,編譯運行之後,可以看到如下所示的效果
六、概括總結
至此,基於mac系統,通過cmake搭建OpenGL環境已經完成。我們再來梳理下,首先通過qtcreator創建工程,接著構建glfw和glad, 然後添加glfw、glad、opengl的頭文件搜索路徑,最後連結glfw庫和opengl的相關庫。最後一點需要注意下,就是要確定glad.c文件編譯進工程,否則可能會出現奇怪的編譯錯誤提示信息。