VS2013+GLFW+GLEW 配置OpenGL開發環境
轉載:http://blog.csdn.net/u011926277/article/details/50912638
最近發現了一個非常好的學習OpenGL基礎的網站,點選開啟連結。由於當中配置環境部分說得不是很詳細,經過許多天的掙扎後,終於成功地配置出了開發環境,特此記錄。
1. 下載glfw。網址為:點選開啟連結。由於還得翻牆,所以使用的github下載的。
2. 下載cMake。網址為:點選開啟連結。下載的版本為本網站作者使用的版本,即win32 Installer。
3. 下載glew。網址為:點選開啟連結。下載的zip包,因為此處使用的方法是用本機編譯。
1>工具準備完畢後,在某一目錄建立一個資料夾用於放置原始碼和庫,本機建立了OpenGL資料夾,其下又建立有include和libs資料夾,分別用於放置原始碼和庫,截圖如下。
2> 由於glew不用使用cMake,所以先編譯glew以獲得所需的庫。
a. 解壓glew的壓縮包,進入build目錄,用對應版本的VS開啟對應的專案(選擇vs12目錄下的工程),本機用VS2013。
b. 用VS2013或者更高版本開啟glew.sln,編譯此專案(右鍵->生成解決方案)。
c. 依次開啟glew-2.0.0\lib\Debug\Win32,此資料夾下有glew32sd.lib,將其拷貝到OpenGL/libs資料夾下
d. 將glew-2.0.0\include資料夾下的GL資料夾整體拷貝到OpenGL/include資料夾下。
3> 準備glfw的庫,下面使用cMake工具首先生成專案,然後編譯,流程如下。
a. 安裝好cMake以後,開啟CMake (cmake-gui),點選Browse Source將目錄設定到glfw目錄。
b. 點選Browse Build,將目錄設定到glfw/build資料夾。(此處的build資料夾需自己建立)如下。
c. 點選左下角Configure,選擇目標平臺,由於本機為vs2013,所以選擇Visio Studio 12 2013,點選確定。
d. 然後再次點選Configure,在點選Generate生成專案,選擇狀態如下。
e. 關閉cMake,剛才建立的build目錄下已經生成了glfw的專案,用vs2013開啟後,編譯,成功後生成glfw3.lib。
f. build\src\Debug目錄下有剛才編譯專案生成的glfw3.lib庫,將此庫拷貝到OpenGL/libs目錄下。
g. 將glfw-master\include下的GLFW資料夾拷貝到OpenGL/include資料夾下。
h. 最後生成的OpenGL資料夾下的檔案如下:
4> 到這一步基本環境就配置完成了,下一步就是在新建的空專案中將庫和原始碼連結,並手動匯入一些庫。具體流程如下。
a. 新建空專案。(c++專案)
b. 右擊專案->屬性->配置屬性->vc++目錄->包含目錄,新增路徑到OpenGL/include。
c. 右擊專案->屬性->配置屬性->vc++目錄->庫目錄,新增路徑到OpenGL/libs,截圖如下。
d. 右擊專案->屬性->配置屬性->連結器->輸入->附加依賴項,在其中新增
opengl32.Lib
glfw3.lib
glew32sd.lib
,截圖如下。
e. 依次將配置儲存後,即可在main類中輸入程式碼,進行測試,如果未報錯,即環境配置成功,測試程式碼可以從開頭的網站上或者,或者複製下面的程式碼進行測試。
[cpp] view plain copy
- #include <iostream>
- // GLEW
- #define GLEW_STATIC
- #include <GL/glew.h>
- // GLFW
- #include <GLFW/glfw3.h>
- // Function prototypes
- void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode);
- // Window dimensions
- const GLuint WIDTH = 800, HEIGHT = 600;
- // The MAIN function, from here we start the application and run the game loop
- int main()
- {
- std::cout << "Starting GLFW context, OpenGL 3.3" << std::endl;
- // Init GLFW
- glfwInit();
- // Set all the required options for GLFW
- glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
- glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
- glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
- glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
- // Create a GLFWwindow object that we can use for GLFW's functions
- GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", nullptr, nullptr);
- if (window == nullptr)
- {
- std::cout << "Failed to create GLFW window" << std::endl;
- glfwTerminate();
- return -1;
- }
- glfwMakeContextCurrent(window);
- // Set the required callback functions
- glfwSetKeyCallback(window, key_callback);
- // Set this to true so GLEW knows to use a modern approach to retrieving function pointers and extensions
- glewExperimental = GL_TRUE;
- // Initialize GLEW to setup the OpenGL Function pointers
- if (glewInit() != GLEW_OK)
- {
- std::cout << "Failed to initialize GLEW" << std::endl;
- return -1;
- }
- // Define the viewport dimensions
- glViewport(0, 0, WIDTH, HEIGHT);
- // Game loop
- while (!glfwWindowShouldClose(window))
- {
- // Check if any events have been activiated (key pressed, mouse moved etc.) and call corresponding response functions
- glfwPollEvents();
- // Render
- // Clear the colorbuffer
- glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- // Swap the screen buffers
- glfwSwapBuffers(window);
- }
- // Terminate GLFW, clearing any resources allocated by GLFW.
- glfwTerminate();
- return 0;
- }
- // Is called whenever a key is pressed/released via GLFW
- void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
- {
- std::cout << key << std::endl;
- if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
- glfwSetWindowShouldClose(window, GL_TRUE);
- }
cop f. 編譯執行後,出現如下視窗即代表環境配置成功。
到這一步,環境配置就結束了。