OpenGL的接口實現(xiàn)是顯卡商實現(xiàn)的(相關(guān)庫函數(shù)由gl開頭)别瞭,OpenGL只是一套標準窿祥,只要電腦有顯卡驅(qū)動,就有OpenGL的函數(shù)庫蝙寨,如果還沒驅(qū)動晒衩,可以從這下載對應(yīng)你電腦的顯卡驅(qū)動。
GLFW是現(xiàn)在較流行墙歪、使用廣泛的OpenGL的界面庫听系,而glut庫已經(jīng)比較老了。GLEW是和管理OpenGL函數(shù)指針有關(guān)的庫虹菲,因為OpenGL只是一個標準/規(guī)范跛锌,具體的實現(xiàn)是由驅(qū)動開發(fā)商針對特定顯卡實現(xiàn)的。由于OpenGL驅(qū)動版本眾多,它大多數(shù)函數(shù)的位置都無法在編譯時確定下來髓帽,需要在運行時查詢菠赚,而GLEW可以解決這些問題。
一.下載 GLFW郑藏,GLEW
到這GLFW官網(wǎng)下載GLFW32位版本衡查,大家普遍下載32位版本,64位可能還不太完善必盖,容易出問題拌牲,為了不必要的麻煩推薦下載32位版本。下載后歌粥,解壓到自己指定的位置塌忽;
到這GLEW官網(wǎng)下載GLEW32位版本,然后解壓
二. 配置GLFW
如果要使用GLFW庫失驶,就要將它和Visual Studio(準確來說是VS下的VC++)鏈接起來土居,有兩種方法。
1.第一種方法嬉探,在工程的屬性管理器包含GLFW的相關(guān)庫
新建一個Visual C++的空項目擦耀,在右下邊選中屬性管理器,鼠標右擊工程名字project1涩堤,選擇屬性眷蜓。也可以鼠標右擊工程名字,在菜單列表最下面可以看到屬性胎围。
(1)在屬性面板里選中VC++目錄-->包含目錄吁系,右邊下拉開始編輯
找到解壓后的glfw-3.2.1.bin.WIN32文件下/include/的位置,將路徑加進去白魂,我的是D:\Another\glfw-3.2.1.bin.WIN32\include,然后點擊確定和應(yīng)用
(2)在屬性面板里選中VC++目錄-->庫目錄垮抗,右邊下拉進行編輯,將文件里的lib-vc2013路徑加進去碧聪,我的是D:\Another\glfw-3.2.1.bin.WIN32\lib-vc2013冒版,點擊確定和應(yīng)用
(3)屬性面板找到鏈接器-->輸入,選中附加依賴項逞姿,在里面添加glfw3.lib辞嗡,glfw3dll.lib,opengl32.lib滞造,只是添加文件的名字续室,注意這些名字不要錯了,不要用逗號分隔谒养,要用換行挺狰。然后點擊確定和應(yīng)用
(4)在D:\Another\glfw-3.2.1.bin.WIN32\lib-vc2013下復(fù)制glfw3.dll文件,如果電腦是64位系統(tǒng)就將它放到C:\Windows\SysWOW64目錄下,如果是32位系統(tǒng)丰泊,就放到C:\Windows\System32下薯定,如果不清楚自己電腦32位還是64,就兩個地方都放一份glfw3.dll
2.第二種方法瞳购,在Visual Studio安裝目錄下的VC文件夾下话侄,添加GLFW相關(guān)庫
打開剛才下載、解壓后的 glfw-3.2.1.bin.WIN32 文件学赛,我的是這樣:
(1)將include中的GLFW文件夾拷貝到VS安裝目錄下的VC/include中
(2)我的是使用VS2013年堆,就將lib-vc2013中的lib文件拷貝到VS2013安裝目錄下的VC/lib中,如果是VS2015就選擇lib-vc2015中的lib文件拷貝到VS2015安裝目錄下的VC/lib中
(3)在D:\Another\glfw-3.2.1.bin.WIN32\lib-vc2013下復(fù)制glfw3.dll文件盏浇,如果電腦是64位系統(tǒng)就將它放到C:\Windows\SysWOW64目錄下变丧,如果是32位系統(tǒng),就放到C:\Windows\System32下绢掰,如果不清楚自己電腦32位還是64痒蓬,就兩個地方都放一份glfw3.dll
(4)和第一種方法的第三步一樣,在屬性面板屬性面板找到鏈接器-->輸入曼月,選中附加依賴項谊却,在里面添加glfw3.lib柔昼,glfw3dll.lib哑芹,opengl32.lib,然后點擊確定和應(yīng)用
三.配置GLEW庫
配置GLEW庫和配置GLFW差不多一樣捕透,也有兩種方法聪姿,只不過鏈接的庫名字不一樣罷了,可以在屬性管理器里包含相關(guān)lib和include文件的路徑乙嘀,也可以將lib和include里的文件分別拷貝到vs安裝目錄下VC里lib和include文件夾下面末购。還有就是,因為有靜態(tài)鏈接和動態(tài)鏈接的選擇虎谢,所以配置GLEW又有兩種不同方式盟榴。注意:配置靜態(tài)鏈接和動態(tài)鏈接不一樣,在代碼里包含頭文件也不一樣婴噩。先找到之前下載擎场、解壓好的glew-1.13.0文件,我的是這樣:
這里我使用第二種方法:
(1)將include中的GL文件夾拷貝到VS安裝目錄下的VC/include中几莽,如果已經(jīng)存在GL文件夾迅办,就合并
(2)將glew-1.13.0\lib\Release\Win32中的lib文件拷貝到VS2013安裝目錄下的VC/lib中
(3)在glew-1.13.0\bin\Release\Win32下復(fù)制glew32.dll文件,如果電腦是64位系統(tǒng)就將它放到C:\Windows\SysWOW64目錄下章蚣,如果是32位系統(tǒng)站欺,就放到C:\Windows\System32下
(4)因為有靜態(tài)鏈接和動態(tài)鏈接的選擇,所以有兩種不同方式,請看下面
1.靜態(tài)鏈接配置的關(guān)鍵點:
在屬性面板里矾策,找到鏈接器-->輸入磷账,選中附加依賴項,編輯蝴韭,在里面添加glew-1.13.0文件里的glew32s.lib(注意有s够颠,static是靜態(tài)的意思),然后點擊確定榄鉴、應(yīng)用履磨,注意:如果glew32s.lib(有s)和glew32.lib都在里面,那么glew32s.lib(有s)在glew32.lib前面庆尘,最好是剃诅,靜態(tài)鏈接就只添加glew32s.lib,動態(tài)的就只加glew32.lib
在代碼里,在最前面應(yīng)該是這樣驶忌,注意:#define GLEW_STATIC應(yīng)該在#include <GL/glew.h>前面矛辕,#include <GL/glew.h>在#include<GLFW/glfw3.h>前面
2.動態(tài)鏈接配置的關(guān)鍵點:
在屬性面板里,找到鏈接器-->輸入付魔,選中附加依賴項聊品,編輯,在里面添加glew-1.13.0文件里的glew32.lib(自己找)几苍,然后點擊確定翻屈、應(yīng)用
然后在glew-1.13.0文件里找到glew32.dll,把它放到你的工程里
在代碼里,只需要#include <GL/glew.h>就可以
4.這里我選擇靜態(tài)鏈接來測試妻坝,此時工程文件里不應(yīng)該出現(xiàn)glew32.dll
#define GLEW_STATIC
#include <GL/glew.h>
#include<GLFW/glfw3.h>
#include<iostream>
/* 注意:#define GLEW_STATIC 在 #include<GL/glew.h>前面伸眶,
* #include<GL/glew.h>在#include<GLFW/glfw3.h>前面
*/
using namespace std;
/*創(chuàng)建鍵盤輸入的回調(diào)函數(shù)*/
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
// 當用戶按下ESC鍵,我們設(shè)置window窗口的WindowShouldClose屬性為true
// 關(guān)閉應(yīng)用程序
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE);
}
int main()
{
/*初始化GLFW*/
glfwInit();
/*配置GLFW窗口*/
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 4);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
/*創(chuàng)建窗口*/
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", nullptr, nullptr);
if (window == nullptr)
{
cout << "Failed to create GLFW window" << endl;
glfwTerminate();
return -1;
}
/*通知GLFW將我們窗口的上下文設(shè)置為當前線程的主上下文*/
glfwMakeContextCurrent(window);
/*GLEW是用來管理OpenGL的函數(shù)指針的,所以在調(diào)用任何OpenGL的函數(shù)之前我們需要初始化GLEW*/
glewExperimental = GL_TRUE;
if (glewInit() != GLEW_OK)
{
cout << "Failed to initialize GLEW" << endl;
return -1;
}
/*告訴OpenGL渲染窗口的尺寸大小刽宪,這樣OpenGL才只能知道怎樣相對于窗口大小顯示數(shù)據(jù)和坐標*/
int width, height;
glfwGetFramebufferSize(window, &width, &height);
glViewport(0, 0, width, height);
/*注冊回調(diào)函數(shù)*/
glfwSetKeyCallback(window, key_callback);
/*事件循環(huán)*/
while (!glfwWindowShouldClose(window))
{
glfwPollEvents();
/*函數(shù)檢查有沒有觸發(fā)什么事件(比如鍵盤輸入厘贼、鼠標移動等),
*然后調(diào)用對應(yīng)的回調(diào)函數(shù)(可以通過回調(diào)方法手動設(shè)置)圣拄。
我們一般在游戲循環(huán)的開始調(diào)用事件處理函數(shù)
*/
// 這里寫渲染指令
glfwSwapBuffers(window);
/*函數(shù)會交換顏色緩沖(它是一個儲存著GLFW窗口每一個像素顏色的大緩沖)嘴秸,
*它在這一迭代中被用來繪制,并且將會作為輸出顯示在屏幕上
*/
}
/*釋放GLFW分配的內(nèi)存*/
glfwTerminate();
return 0;
}
運行成功則配置完成庇谆,哈哈