1. 程式人生 > >OpenGL--------第一個窗口

OpenGL--------第一個窗口

view define 技術分享 lse 9.png main net 鏈接庫 設值

任務

開始對OpenGL的學習,今天的任務是在VS2017中配置OpenGL的庫(GLFW,GLEW)並創建第一個窗口。

搭建環境

1.獲取GLFW庫

從官方網站下載預編譯的二進制版本和相應頭文件,也可以下載源碼包再進行編譯(不建議)。

2.將GLFW鏈接進工程

工程屬性(Project Properties) --> VC++目錄 --> 包含目錄/庫目錄 (如下圖1)

將include目錄(包含glfw.h)的地址加入包含目錄中

將庫目錄(包含glfw.lib)的地址加入庫目錄中

工程屬性-->連接器-->輸入-->附加依賴項-->將庫名稱加入附加依賴項中(如下圖2)

【圖1】

技術分享圖片

【圖2】

技術分享圖片

3.獲取GLEW

從官方網站下載預編譯的二進制版本和相應頭文件,也可以下載源碼包再進行編譯(不建議)。

4.將GLEW鏈接進工程-----------同2

5.將glew32s.lib連接進工程----Visual Studio默認安裝opengl32.lib庫,直接加入附加依賴項即可。

代碼實現

 1 // GLEW 使用靜態鏈接庫
 2 #define GLEW_STATIC
 3
#include<GL/glew.h> 4 5 // GLFW 6 #include<GLFW\glfw3.h> 7 8 #include<iostream> 9 using namespace std; 10 11 int main() 12 { 13 glewInit(); 14 // 初始化GLFW 15 glfwInit(); 16 // 配置GLFW--告訴GLFW使用OpenGL版本為3.3 17 // 確定主版本號(Mjaor) 18 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3
); 19 // 確定副版本號 (Minor) 20 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); 21 // 明確告訴GLFW使用核心模式,使用舊版函數將導致invalid operation(無效操作) 22 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 23 // 不允許用戶調整窗口大小 24 glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); 25 26 // 創建窗口對象,設定窗口寬,高,名稱 nullptr--空指針 27 GLFWwindow* window = glfwCreateWindow(800, 600, "Hello,OpenGL", nullptr, nullptr); 28 if (window == nullptr) 29 { 30 std::cout << "Failed to create GLFW window" << std::endl; 31 glfwTerminate(); 32 return -1; 33 } 34 35 36 // 初始化GLEW 37 // 設置glewExperimental值為GL_TURE,是的GLEW在管理OpenGL的函數指針時更多使用現代化技術 38 // 如果設值為GL_FALSE的話可能會在使用OpenGL的核心模式時出現問題 39 glewExperimental = GL_TRUE; 40 if (glewInit() != GLEW_OK) 41 { 42 std::cout << "Faild to initialize GLEW" << std::endl; 43 return -1; 44 } 45 46 // 獲取窗口尺寸,大小 47 int width, height; 48 glfwGetFramebufferSize(window, &width, &height); 49 // 告訴OpenGL渲染窗口的尺寸大小--前兩個參數控制窗口左下角的位置--取值範圍[-1,1],映射到屏幕坐標[0, 800], [0,600] 50 // 後兩個參數控制渲染窗口的寬度和高度 51 glViewport(0, 0, width, height); 52 53 // glfwWindowShouldClose 檢查GLFW是否被要求退出 54 while (!glfwWindowShouldClose(window)) 55 { 56 // 檢測事件觸發 57 glfwPollEvents(); 58 // 交換顏色緩沖(時一個儲存GLFW窗口每一個像素顏色的大緩沖),在叠代中被用作繪制,並將輸出顯示在屏幕 59 glfwSwapBuffers(window); 60 } 61 62 glfwTerminate(); 63 return 0; 64 }

錯誤總結

1.獲取glfw,glew庫時,沒必要下載源代碼使用cmake編譯,費時且效果不佳。

2.添加glew依賴項,庫目錄路徑不對,報錯如下。

技術分享圖片

3.與其他庫的使用沖突,

解決:工程-->屬性-->連接器-->輸入-->忽略特定默認庫 加入沖突的默認庫名稱

技術分享圖片

4.未鏈接opengl32.lib庫,報錯如下。

技術分享圖片

5.調試時,窗口閃退,報錯類似如下。(部分解決)

技術分享圖片

解決:調試-->選項和設置 -->調試-->常規-->勾上啟動原服務器支持-->常規-->符號-->勾選Microsoft符號服務器

原方案(https://blog.csdn.net/acliyu/article/details/78795869)

仍存在問題,如下,暫不能解決。

技術分享圖片

OpenGL--------第一個窗口