1. 程式人生 > >VS2013+GLFW+GLEW 配置OpenGL開發環境

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
  1. #include <iostream>    
  2.   
  3. // GLEW    
  4. #define GLEW_STATIC    
  5. #include <GL/glew.h>    
  6.   
  7. // GLFW    
  8. #include <GLFW/glfw3.h>    
  9.   
  10.   
  11. // Function prototypes    
  12. void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode);  
  13.   
  14. // Window dimensions    
  15. const GLuint WIDTH = 800, HEIGHT = 600;  
  16.   
  17. // The MAIN function, from here we start the application and run the game loop    
  18. int main()  
  19. {  
  20.     std::cout << "Starting GLFW context, OpenGL 3.3" << std::endl;  
  21.     // Init GLFW    
  22.     glfwInit();  
  23.     // Set all the required options for GLFW    
  24.     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);  
  25.     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);  
  26.     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);  
  27.     glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);  
  28.   
  29.     // Create a GLFWwindow object that we can use for GLFW's functions    
  30.     GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", nullptr, nullptr);  
  31.     if (window == nullptr)  
  32.     {  
  33.         std::cout << "Failed to create GLFW window" << std::endl;  
  34.         glfwTerminate();  
  35.         return -1;  
  36.     }  
  37.     glfwMakeContextCurrent(window);  
  38.     // Set the required callback functions    
  39.     glfwSetKeyCallback(window, key_callback);  
  40.   
  41.     // Set this to true so GLEW knows to use a modern approach to retrieving function pointers and extensions    
  42.     glewExperimental = GL_TRUE;  
  43.     // Initialize GLEW to setup the OpenGL Function pointers    
  44.     if (glewInit() != GLEW_OK)  
  45.     {  
  46.         std::cout << "Failed to initialize GLEW" << std::endl;  
  47.         return -1;  
  48.     }  
  49.   
  50.     // Define the viewport dimensions    
  51.     glViewport(0, 0, WIDTH, HEIGHT);  
  52.   
  53.     // Game loop    
  54.     while (!glfwWindowShouldClose(window))  
  55.     {  
  56.         // Check if any events have been activiated (key pressed, mouse moved etc.) and call corresponding response functions    
  57.         glfwPollEvents();  
  58.   
  59.         // Render    
  60.         // Clear the colorbuffer    
  61.         glClearColor(0.2f, 0.3f, 0.3f, 1.0f);  
  62.         glClear(GL_COLOR_BUFFER_BIT);  
  63.   
  64.         // Swap the screen buffers    
  65.         glfwSwapBuffers(window);  
  66.     }  
  67.   
  68.     // Terminate GLFW, clearing any resources allocated by GLFW.    
  69.     glfwTerminate();  
  70.     return 0;  
  71. }  
  72.   
  73. // Is called whenever a key is pressed/released via GLFW    
  74. void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)  
  75. {  
  76.     std::cout << key << std::endl;  
  77.     if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)  
  78.         glfwSetWindowShouldClose(window, GL_TRUE);  
  79. }  

  cop

f. 編譯執行後,出現如下視窗即代表環境配置成功。



到這一步,環境配置就結束了。