在正式開始學習OpenGL之前,我們需要先配置好OpenGL環境。
IDE
首先我們需要選擇一個IDE。支持OpenGL的IDE有很多,這里我們選擇Visual Studio 2015(Windows平台)作為我們的IDE。
GLFW
OpenGL是一個圖形庫,而要畫圖,就需要先創建一個窗口。不幸的是,OpenGL沒有提供創建窗口的功能,必須自己創建窗口。而創建窗口在每一個操作系統上都不同(在Windows上代碼量也不少)。因此我們將會使用一個窗口庫來簡化這一過程。常用的OpenGL窗口庫有GLUT、GLFW和SDL。這里我們選擇GLFW。
GLFW可以從它的官方網站上下載。你可以直接下載它的binaries,或者自己用CMake編譯,詳細配置方法請看我的另一篇文章。要注意,最好使用32位的版本。這里我使用的GLFW版本是3.2.1。
如果下載已經編譯好的binaries,解壓並打開,可以找到一個include文件夾和若干lib-xxxx文件夾(xxxx是編譯器名)。include文件夾里含有一個GLFW文件夾,里面有glfw3.h(還有一個glfw3native.h不用管)。如果幾個lib-xxxx文件夾里有針對你的編譯器的(例如lib-vc2015對應於VS2015),打開該文件夾,可以看到里面有glfw3.lib,glfw3dll.lib和glfw3.dll三個文件。
建議將本教程使用的所有的頭文件和庫文件分別整理到兩個文件夾中(我把它們命名為include和lib),並且整理頭文件時,建議直接移動整個GLFW文件夾。
GLEW
除了GLFW,我們還需要一個GLEW庫。Visual Studio對於OpenGL(gl.h)只支持到1.1,而本教程要學的是OpenGL 3.3。但是,OpenGL是由顯卡支持的,顯卡已經提供了我們需要的OpenGL函數。因此就需要在運行程序時動態地獲取函數地址。在Windows下,以glGenBuffers為例,大概是這樣的:
#include <windows.h> #include <GL/gl.h> ... // define the functions' prototypes typedef void * (*WGLGETPROCADDRESS)(const char *); typedef void (*GLGENBUFFERS)(GLsizei, GLsizei *); // load opengl32.dll and query wglGetProcAddress' address HMODULE hDll = LoadLibrary("opengl32.dll"); WGLGETPROCADDRESS wglGetProcAddress = (WGLGETPROCADDRESS)GetProcAddress(hDll, "wglGetProcAddress"); // query OpenGL functions' addresses GLGENBUFFERS glGenBuffers = (GLGENBUFFERS)wglGetProcAddress("glGenBuffers"); // now the function can be used as normal GLuint vbo; glGenBuffers(1, &vbo);
每個使用到的OpenGL函數都要這么做,工作量也是很大的。而GLEW正是做這個的——幫我們獲取OpenGL函數地址,這樣我們就不需要手動獲取函數地址了。
GLEW可以從這里下載。你可以下載已經編譯好的binaries,也可以下載源代碼自己編譯。同樣的,最好使用32位的版本。解壓binaries之后在include文件夾中有一個GL文件夾,里面有glew.h和幾個其它頭文件,lib/Release/Win32下有glew32.lib和glew32s.lib(32位),bin/Release/Win32下有glew32.dll(32位)。
靜態鏈接和動態鏈接
我們上面下載的GLFW和GLEW都有靜態和動態兩種使用方式。靜態的意思就是不使用DLL,而動態就是指使用DLL。但注意,使用DLL和不使用DLL兩種情況,會影響到使用的.lib文件。
GLFW:
靜態:glfw3.lib
動態:glfw3dll.lib,glfw3.dll
GLEW:
靜態:glew32s.lib
動態:glew32.lib,glew32.dll
具體使用哪種,可自行選擇。
創建項目
現在我們需要的庫已經下載完了,我們可以開始創建項目了。這里我們使用Visual Studio 2015作為IDE,下面是使用Visual Studio時的步驟(其它IDE類似):
1. 點擊“文件”(File),選擇“新建/項目”(New/Project)。
2. 在新建項目窗口左端,選擇Visual C++。
3. 選擇“空項目”(Empty Project),選好項目位置,輸入名字之后,點擊“確定”(OK)。
4. 點擊“項目”(Project),選擇“屬性”(Property)。
5. 在屬性頁左端,選擇“配置屬性/VC++目錄”(Configuration Properties/VC++ Directories),點擊“包含目錄”(Include Directories),右邊會出現一個箭頭,點擊該箭頭,出現一個“<編輯...>”(<Edit...>)框,點擊該框,輸入頭文件路徑(這里我把GLFW的include/GLFW文件夾和GLEW的include/GL文件夾都整理到了一個名為include的文件夾中)。
6. 和“包含目錄”類似,編輯“庫目錄”(Library Directories),輸入庫文件路徑(這里我把所有庫文件都整理到了一個名為lib的文件夾中)。
7. 選擇“鏈接器/輸入”(Linker/Input),和前面類似,編輯“附加依賴項”(Additional Dependencies),輸入如下內容,表示編譯時鏈接下面的.lib:
opengl32.lib
glfw3.lib
glew32s.lib
注意如果GLFW是動態的,把glfw3.lib改成glfw3dll.lib;如果GLEW是動態的,把glew32s.lib改成glew32.lib。
8. 在屬性頁上,點擊“確定”(OK)或“應用”(Apply)。
9. 最后,如果使用了動態鏈接的庫(不管是GLFW還是GLEW),(建議)將相應的dll復制到項目所在路徑。
到此,項目配置完成!現在你可以開始學習下一課了。
注:本文可轉載,轉載請注明地址:http://www.cnblogs.com/collectionne/p/6617364.html
