OpenGL入門1.0:環境搭建


每一個小步驟的源碼都放在了Github

的內容為插入注釋,可以先跳過

准備工作(需要的庫):

GLFW

GLFW是一個專門針對OpenGL的C語言庫,它提供了一些渲染物體所需的最低限度的接口,允許用戶創建OpenGL上下文,定義窗口參數以及處理用戶輸入

官網獲取Source package,我們只需要里面的include文件夾和我們自己編譯生成的庫

為什么要在自己機器上編譯?因為從源代碼編譯庫可以保證生成的庫是兼容你的操作系統和CPU的,而預編譯的二進制文件可能會出現兼容問題(甚至有時候沒提供支持你系統的文件)

但是提供源代碼所產生的一個問題在於不是每個人都用相同的IDE開發程序,因而源碼提供的工程/解決方案文件可能和一些IDE不兼容。人們只能從.c/.cpp和.h/.hpp文件來自己建立工程/解決方案,這是一項枯燥的工作,但因此也誕生了一個叫做CMake的工具

CMake

CMake是一個工程文件生成工具 http://www.cmake.org/cmake/resources/software.html

我們可以使用預定義好的CMake腳本,根據自己的選擇(像是Visual Studio, Code::Blocks, Eclipse)生成不同IDE的工程文件。這個工具就能讓我們從GLFW源碼里創建一個Visual Studio 2017工程文件,之后就能順利編譯

CMake需要一個源代碼目錄和一個存放編譯結果的目標文件目錄,源代碼目錄我們選擇下載的GLFW的源代碼的根目錄,然后我們新建一個 build 文件夾作為目標目錄

在設置完目錄之后,點擊Configure(設置)按鈕,讓CMake讀取設置和源代碼。我們接下來需要選擇工程的生成器,這里我選擇 Visual Studio 2017 (根據自己的IDE版本設定)CMake會顯示可選的編譯選項用來配置最終生成的庫

這里我們使用默認設置,並再次點擊Configure(設置)按鈕保存設置。保存之后,點擊Generate(生成)按鈕,生成的工程文件會在你的build文件夾中

編譯

build文件夾里可以找到GLFW.sln文件,用Visual Studio 2017打開,因為CMake已經配置好了項目,所以我們直接點擊Build Solution(生成解決方案)按鈕,然后編譯的庫glfw3.lib(注意我們用的是第3版)就會出現在src/Debug文件夾內

庫生成完畢之后,我們需要讓IDE知道庫和頭文件的位置,教程提到有兩種方法:

  1. 找到IDE或者編譯器的/lib/include文件夾,添加GLFW的include文件夾里的文件到IDE的/include文件夾里去。用類似的方法,將glfw3.lib添加到/lib文件夾里去。雖然這樣能工作,但這不是推薦的方式,因為這樣會讓你很難去管理庫和include文件,而且重新安裝IDE或編譯器可能會導致這些文件丟失
  2. 推薦的方式是建立一個新的目錄包含所有的第三方庫文件和頭文件,並且在你的IDE或編譯器中指定這些文件夾。我個人會使用一個單獨的文件夾,里面包含LibsInclude文件夾,在這里存放OpenGL工程用到的所有第三方庫和頭文件。這樣我的所有第三方庫都在同一個位置(並且可以共享至多台電腦)然而這要求你每次新建一個工程時都需要告訴IDE/編譯器在哪能找到這些目錄

這里我選擇第二個方式,建立一個文件夾放好了頭文件和lib文件,就可以開始第一個工程了

建立第一個工程並鏈接

首先,打開Visual Studio,創建一個新的項目,如果VS提供了多個選項,選擇Visual C++,然后選擇Empty Project(空項目)

為了使我們的程序使用GLFW,我們需要把GLFW庫鏈接(Link)進工程。這可以通過在鏈接器的設置里指定我們要使用glfw3.lib來完成,但是由於我們將第三方庫放在另外的目錄Libraries中,我們的工程還不知道在哪尋找這個文件,於是我們首先需要將我們放第三方庫的目錄添加進設置

要添加這些目錄(需要VS搜索庫和include文件的地方),我們首先進入Project Properties(工程屬性,在解決方案窗口里右鍵項目),然后選擇VC++ Directories(VC++ 目錄)選項卡(如下圖)

我們需要把存放頭文件的Include文件夾添加到包含目錄,把存放庫glfw3.lib的Lib文件夾添加到庫目錄

這里可以添加任意多個目錄,IDE會從這些目錄里尋找頭文件。所以只要你將GLFW的Include文件夾加進路徑中,你就可以使用<GLFW/..>來引用頭文件。庫文件夾也是一樣的

最后得到

現在VS可以找到所需的所有文件了,最后需要在Linker(鏈接器)選項卡里的Input(輸入)選項卡里添加glfw3.libopengl32.lib(我是Windows平台,opengl32.lib已經包含在Microsoft SDK里了,它在Visual Studio安裝的時候就默認安裝了,我們只需將opengl32.lib直接添加進連接器設置里就行了)

要鏈接一個庫我們必須告訴鏈接器它的文件名。庫名字是glfw3.lib,我們把它加到Additional Dependencies(附加依賴項)字段中(直接輸入就glfw3.lib可以),這樣GLFW在編譯的時候就會被鏈接進來了

GLAD

我們還有一件事要做,因為OpenGL只是一個標准/規范,具體的實現是由驅動開發商針對特定顯卡實現的,由於OpenGL驅動版本眾多,它大多數函數的位置都無法在編譯時確定下來,需要在運行時查詢,所以任務就落在了開發者身上,開發者需要在運行時獲取函數地址並將其保存在一個函數指針中供以后使用。幸運的是,有些庫能簡化此過程,其中GLAD是目前最新,也是最流行的庫

GLAD是一個開源的庫,它能解決我們上面提到的那個繁瑣的問題,GLAD使用了一個在線服務,在這里我們能夠告訴GLAD需要定義的OpenGL版本,並且根據這個版本加載所有相關的OpenGL函數

打開GLAD的在線服務,將語言(Language)設置為C/C++,在API選項中,選擇3.3以上的OpenGL(gl)版本(教程中使用3.3版本),之后將模式(Profile)設置為Core,並且保證生成加載器(Generate a loader)的選項是選中的。現在可以先(暫時)忽略拓展(Extensions)中的內容,都選擇完之后,點擊生成(Generate)按鈕來生成庫文件

GLAD現在應該提供給你了一個zip壓縮文件,包含兩個頭文件目錄,和一個glad.c文件。將兩個頭文件目錄(gladKHR)復制到你的Include文件夾中(或者增加一個額外的項目指向這些目錄),並添加glad.c文件到你的工程里

經過前面的這些步驟之后,你就應該可以將以下的指令加到你的文件頂部了:

#include <glad/glad.h> 

點擊編譯按鈕應該會出現:

這只是因為我們沒有main函數入口,建立一個test.cpp文件加入

int main()
{
    return 0;
}

沒有報錯,那么我們的工作完成了

設置相對路徑

由於我要根據情況使用兩台設備開發,如果我使用git或者其他雲服務在另一台PC打開這個項目,之前添加的第三方庫文件和頭文件就會丟失,使用相對路徑就能暫時解決這個問題

先把之前建立的Libraries拉到根目錄

然后更改我們之前設置的路徑,由於Libraries已在根目錄下,路徑就可以這樣寫:

兩個路徑更改完后就是:

確認之后,項目一切正常,wow~!awesome~!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM