OpenGL(二)準(zhǔn)備工作:鏈接GLFW庫(kù)、OpenGL庫(kù)以及GLAD庫(kù)到C++項(xiàng)目

前言:又是元?dú)鉂M滿的一天呀,廢話不多說(shuō),沖鴨?。?!


新建項(xiàng)目

  • 打開VS


  • 新建項(xiàng)目


  • 選擇Visual C++ 下的空項(xiàng)目,寫入項(xiàng)目名稱,以及要存儲(chǔ)的位置,點(diǎn)擊確定


將頭文件夾和庫(kù)文件夾指定到包含目錄和庫(kù)目錄

  • 點(diǎn)擊右側(cè)的解決方案資源管理器


  • 右擊項(xiàng)目,點(diǎn)擊屬性


  • 選擇VC++目錄選項(xiàng)卡


  • 此處的包含目錄和庫(kù)目錄需要把自己的Include和Libs文件夾分別指定進(jìn)去


  • 點(diǎn)擊右邊的向下箭頭,點(diǎn)擊編輯


  • 新建行


  • 指定路徑


  • 找到自己創(chuàng)建的Include文件夾(這里可以添加多個(gè)路徑,IDE會(huì)在這里尋找頭文件,庫(kù)文件同理),點(diǎn)擊選擇文件夾


  • 確定


  • 現(xiàn)在頭文件已經(jīng)在包含目錄中了,庫(kù)文件指定路徑到庫(kù)目錄跟頭文件指定到包含目錄同理。這里不再?gòu)?fù)述

鏈接

為什么要鏈接?
只有鏈接了你要使用的第三方庫(kù),才能夠使用。項(xiàng)目中需要用到GLFW庫(kù),所以需要把GLFW庫(kù)鏈接(Link)進(jìn)工程
要鏈接一個(gè)庫(kù)我們必須告訴鏈接器它的文件名

  • 選擇鏈接器的輸入選項(xiàng)卡,點(diǎn)擊附加依賴項(xiàng)右邊的向下箭頭,點(diǎn)擊編輯


  • 需要把在Libs文件下要要用的glfw3.lib這個(gè)庫(kù)寫入附加依賴項(xiàng)中
    這樣GLFW在編譯的時(shí)候就會(huì)被鏈接進(jìn)來(lái)了


  • 除了GLFW庫(kù)以外,還需要添加一個(gè)鏈接條目鏈接到OpenGL的庫(kù),但是這個(gè)庫(kù)可能因?yàn)橄到y(tǒng)的不同而有一些差別
  • 因?yàn)槲沂褂玫氖莣indows平臺(tái),opengl32.lib已經(jīng)包含在Microsoft SDK里了,它在Visual Studio安裝的時(shí)候就默認(rèn)安裝了。由于用的是VS編譯器,并且是在Windows操作系統(tǒng)上,我們只需將opengl32.lib添加進(jìn)連接器設(shè)置里就行了。如果你是其他平臺(tái),請(qǐng)看原文詳細(xì)內(nèi)容:https://learnopengl-cn.github.io/01%20Getting%20started/02%20Creating%20a%20window/
  • 添加完glfw3.lib和opengl32.lib后,點(diǎn)擊確定


  • 點(diǎn)擊確定



    此時(shí)GLFW庫(kù)以及OPENGL庫(kù)就鏈接完畢了

GLAD

為什么使用GLAD?
因?yàn)镺penGL只是一個(gè)標(biāo)準(zhǔn)/規(guī)范,具體的實(shí)現(xiàn)是由驅(qū)動(dòng)開發(fā)商針對(duì)特定顯卡實(shí)現(xiàn)的。由于OpenGL驅(qū)動(dòng)版本眾多,它大多數(shù)函數(shù)的位置都無(wú)法在編譯時(shí)確定下來(lái),需要在運(yùn)行時(shí)查詢。所以任務(wù)就落在了開發(fā)者身上,開發(fā)者需要在運(yùn)行時(shí)獲取函數(shù)地址并將其保存在一個(gè)函數(shù)指針中供以后使用。取得地址的方法因平臺(tái)而異,在Windows上會(huì)是類似這樣:

// 定義函數(shù)原型
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// 找到正確的函數(shù)并賦值給函數(shù)指針
GL_GENBUFFERS glGenBuffers  = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// 現(xiàn)在函數(shù)可以被正常調(diào)用了
GLuint buffer;
glGenBuffers(1, &buffer);

你可以看到代碼非常復(fù)雜,而且很繁瑣,我們需要對(duì)每個(gè)可能使用的函數(shù)都要重復(fù)這個(gè)過程。幸運(yùn)的是,有些庫(kù)能簡(jiǎn)化此過程,其中GLAD是目前最新,也是最流行的庫(kù)。

配置GLAD

  • 打開在線服務(wù)
    GLAD使用了一個(gè)在線服務(wù)。在這里我們能夠告訴GLAD需要定義的OpenGL版本,并且根據(jù)這個(gè)版本加載所有相關(guān)的OpenGL函數(shù)。

  • 語(yǔ)言選為C/C++,OpenGL,API選gl的大于等于3.3的版本,這里我們用的是3.3,模式選擇Core,勾選Generate a loader,點(diǎn)擊GENERATE



  • 下載glad.zip壓縮包


  • 解壓壓縮包


  • 將兩個(gè)頭文件目錄(glad和KHR)復(fù)制到你的Include文件夾中


  • 右擊項(xiàng)目,選擇添加>>現(xiàn)有項(xiàng)


  • 找到你解壓glad壓縮包的位置,添加glad.c文件到你的工程中


測(cè)試GLAD庫(kù)和GLFW庫(kù)是否鏈接成功

  • 右鍵項(xiàng)目,選擇添加>>新建項(xiàng)


  • 選擇C++文件,更改名稱為main,點(diǎn)擊添加


  • 將以下的指令加到你的文件頂部:
#include <glad/glad.h>
#include <GLFW/glfw3.h>

注意:請(qǐng)確認(rèn)是在包含GLFW的頭文件之前包含了GLAD的頭文件。GLAD的頭文件包含了正確的OpenGL頭文件(例如GL/gl.h),所以需要在其它依賴于OpenGL的頭文件之前包含GLAD。


  • 點(diǎn)擊編譯按鈕


  • 如果沒有給你提示任何的錯(cuò)誤,恭喜你成功了!



總結(jié):此節(jié)我們學(xué)習(xí)了如何新建VS的C++項(xiàng)目,包含了如何將頭文件夾和庫(kù)文件夾指定到包含目錄和庫(kù)目錄、如何將GLFW庫(kù)和OpenGL庫(kù)鏈接到工程中。之后因?yàn)殚_發(fā)者需要在運(yùn)行時(shí)獲取函數(shù)地址并將其保存在一個(gè)函數(shù)指針中供以后使用,而取得地址的代碼非常復(fù)雜、繁瑣,需要對(duì)每個(gè)可能使用的函數(shù)都要重復(fù)這個(gè)過程,故而我們使用了GLAD庫(kù)簡(jiǎn)化了取地址的過程。為了使用GLAD庫(kù),我們學(xué)習(xí)了如何將GLAD庫(kù)配置到我們的項(xiàng)目中(需要將頭文件glad和KHR放入我們的Include目錄下,以及需要把要glad/src下的glad.c添加到項(xiàng)目中)。經(jīng)過上述的這些準(zhǔn)備工作,我們就可以盡情的享用GLFW庫(kù)、OpenGL庫(kù)以及GLAD庫(kù)了!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容