C++/OpenGL 入门(1):关于VS2017 中OpenGL部分安装过程
參考書目:Computer Graphics Programming in OpenGL Using C++ by V Scott Gordon John L Clevenger (z-lib.org)
下載方式: zlibrary 網(wǎng)站(https://zh.ng1lib.org/)中搜索書名
OpenGL 官方幫助手冊(cè),網(wǎng)址:https://www.opengl.org/sdk/docs/man
書中的例子需要 GLM 庫(kù),在附錄有教安裝步驟,GLM 庫(kù) 的文檔,網(wǎng)址:
https://glm.g-truc.net/0.9.9/index.html
SOLI 庫(kù):用來(lái)加載圖片紋理圖像,網(wǎng)址: https://github.com/SpartanJ/soil2
3D 圖形變成相關(guān)的書籍推薦:
? (Sellers et al.) OpenGL SuperBible [SW15]
? (Kessenich et al.) OpenGL Programming Guide [KS16] (the “red book”)
? (Wolff) OpenGL 4 Shading Language Cookbook [WO13]
? (Angel and Shreiner) Interactive Computer Graphics [AS14]
? (Luna) Introduction to 3D Game Programming with DirectX 12 [LU16]
如何查找電腦的顯卡能否支持什么版本的OpenGL
① 計(jì)算機(jī)管理 -> 設(shè)備管理器 -> 顯示適配器 -> Interl? HD Graphics 620
用測(cè)試工具GPU_Caps_Viewer查看顯卡支持的OpenGL的版本號(hào),可能是 4.1.書中說(shuō)最好支持4.3以上,所以不確定是否有影響
下載了 GLview 免費(fèi)軟件,查看版本號(hào),圖中顯示,可以支持 4.4的版本,應(yīng)該能滿足書中的要求,GLview 的壓縮包,解壓打開直接用即可,不需要安裝
確保 OpenGL 的版本號(hào)之后,需要編譯 GLFW, 編譯之前,需要安裝 cmake,cmake 網(wǎng)址在:https://cmake.org
cmake 下載, 網(wǎng)址:https://cmake.org/download/
公眾號(hào)安裝教程: https://mp.weixin.qq.com/s/6Pu9qQgwoaT2WvX37uK_aw
下載 GLFW
? 下載 glfw-3.3.6,網(wǎng)址是:https://www.glfw.org/
位置:E:\pg\code\220124 computer graphic\glfw-3.3.6
? 下載 cmake,網(wǎng)址是:https://cmake.org/download/
位置:F:\cmake\cmake-3.22.1-windows-x86_64\bin
貌似直接打開 cmake-gui.exe 就能用,不需要安裝,但是在電腦 cmd 輸入 cmake –version看不到 cmake的信息。以下是 cmake 的界面
? 打開cmake, 用 cmake 編譯 glfw 文件夾,具體步驟是,
①“where is the source code”輸入 glfw 文件夾所在位置“E:/pg/code/220124 computer graphic/glfw-3.3.6/glfw-3.3.6”
②“where to build the binaries”輸入 cmake生成文件想要存儲(chǔ)的位置“E:/pg/code/220124 computer graphic/CmakeGLFW”
③點(diǎn)擊 “configure”,由于電腦裝的是 vs2017, 注意跳出的窗口要選擇 VS2017
④ 編譯成功后,選擇“generate”,在生成的文件夾中可以看到 “GLFW.sln”,用vs2017打開
⑤ VS2017 打開 “GLFW.sln”后,直接點(diǎn)擊“本地 Windows 編譯器”,即可直接編譯
圖 cmake 界面
圖 點(diǎn)擊 configure 后彈窗,需要選擇電腦安裝的VS版本,電腦安裝2017VS,所以選擇2017
圖 cmake 編譯 GLFW 后生成的文件夾,其中 GLFW.sln 文件需要用 VS2017打開
圖 VS2017 成功打開 GLFW.sln 后,直接點(diǎn)擊 “本地 Windows 編譯器”,VS開始編譯
? 結(jié)果:上述步驟,主要生成了三個(gè)文件,在后續(xù)工作中會(huì)用到
① 庫(kù) “glfw3.lib”位置 “E:\pg\code\220124 computer graphic\CmakeGLFW\src\Debug”,就是在cmake 編譯 glfw 文件后生成的文件夾 CmakeGLFW 中
② 兩個(gè)頭文件,在 GLFW 文件夾中,位置是: 就是在,網(wǎng)上下載的 glfw 的文件夾 include 中,有 GLFW文件夾
E:\pg\code\220124 computer graphic\glfw-3.3.6\glfw-3.3.6\include\GLFW
下載 GLEW
? 網(wǎng)址:http://glew.sourceforge.net/
① 注意下載的 window 版本下的,而不是普通的 zip
② 位置:E:\pg\code\220124 computer graphic\glew-2.1.0-win32
③ 需要的文件
文件 glew32.dll 位置: bin 文件夾 -> Release 文件夾 -> x64 文件夾
庫(kù) glew32.lib 位置: lib 文件夾 -> Release 文件夾 -> x64 文件夾
文件夾 GL 位置: include 文件夾 -> GL 文件夾
下載 GLM
? 網(wǎng)址:https://github.com/g-truc/glm/releases/tag/0.9.8.0
? 版本:0.9.8.0
? Csdn 參考教程: https://blog.csdn.net/Wonz5130/article/details/83116009
教程過(guò)程:
步驟是,在 VS 創(chuàng)建的項(xiàng)目所在文件夾中,將下載的 glm-0.9.8.0 復(fù)制進(jìn)去,在 VS 界面中,將這個(gè)項(xiàng)目的屬性中,“添加包括的目錄 Additional Include Directories ”添加 glm 的文件夾,然后在項(xiàng)目的源代碼里面輸入頭文件:
//glm
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp> //需要什么變換,就導(dǎo)入什么文件,具體可以去官網(wǎng)看
#include <glm/gtc/type_ptr.hpp>
? 需要的文件:壓縮包解壓后,glm文件夾
下載 SOIL2 庫(kù)
? 首先下載 premake 工具,需要用 premake5.exe
? Premake 下載網(wǎng)址 : https://premake.github.io/download
? SOIL2 下載網(wǎng)址: https://github.com/SpartanJ/soil2
? SOLIL2 和 premake 下載后的壓縮包存儲(chǔ)位置: E:\pg\code\220124 computer graphic
? 將 premake5.exe 復(fù)制到 SOIL2 文件夾,然后在 SOIL2 文件夾的路徑上 更改為 cmd,調(diào)出在這個(gè)路徑下的命令窗口:
圖 如何在 SOIL2 文件夾中,調(diào)出該路徑下的命令窗口
? 在 SOIL2 庫(kù)所在路徑下的cmd 窗口 輸入:premake5 vs2017
? 打開 SOIL2 文件夾 -> make 文件夾 -> windows 文件夾 ,位置為:
E:\pg\code\220124 computer graphic\SOIL2-master\SOIL2-master\make\windows
右鍵用 VS2017 打開 SOIL2.sln
? 打開 VS2017后,右鍵點(diǎn)擊左邊欄 “soil2-static-lib”-> “生成”
? 如果報(bào)錯(cuò):
MSB8036 找不到 Windows SDK 版本 8.1。請(qǐng)安裝所需版本的 Windows SDK,或者在項(xiàng)目屬性頁(yè)中或通過(guò)右鍵單擊解決方案并選擇“重定解決方案目標(biāo)”來(lái)更改 SDK 版本。
解決方法:
參考網(wǎng)址:
https://blog.csdn.net/weixin_44981971/article/details/122035658?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_aa&utm_relevant_index=2
實(shí)際步驟:
① “項(xiàng)目” -> “重定解決方案目標(biāo)”
② 在彈出窗口,默認(rèn)選項(xiàng),直接按確定
③ 右鍵選定 “soil2-static-lib”,選擇“重定向項(xiàng)目”,彈窗中按照默認(rèn)選項(xiàng),選擇確認(rèn)
? ④ 重復(fù)報(bào)錯(cuò)前的那一步,右鍵點(diǎn)擊左邊欄 “soil2-static-lib”-> “生成”,此時(shí)就沒有報(bào)錯(cuò)了
建立自己的 lib 庫(kù) 和 include 庫(kù)
? 在自己喜歡的電腦儲(chǔ)存位置上,建立一個(gè)文件夾,這里命名為 0126 template, 文件夾下再建立兩個(gè)文件夾,分別命名 “l(fā)ib”和“include”。另外,將 glew32.dll 文件復(fù)制進(jìn)該文件夾,復(fù)制來(lái)源:
glew32.lib: E:\pg\code\220124 computer graphic\glew-2.1.0-win32\glew-2.1.0\bin\Release\Win32
? “l(fā)ib”文件夾中,三個(gè)文件:glew32.lib , glfw3.lib, soil2-debug.lib, 位置分別在:
glew32.lib:E:\pg\code\220124 computer graphic\glew-2.1.0-win32\glew-2.1.0\lib\Release\x64
glfw3.lib:E:\pg\code\220124 computer graphic\CmakeGLFW\src\Debug
soil2-debug.lib: E:\pg\code\220124 computer graphic\SOIL2-master\SOIL2-master\lib\windows
? “include”文件夾中,四個(gè)文件夾,GL, GLFW, glm, SOIL2, 位置分別在:
GL: E:\pg\code\220124 computer graphic\glew-2.1.0-win32\glew-2.1.0\include
GLFW: E:\pg\code\220124 computer graphic\glfw-3.3.6\glfw-3.3.6\include
glm: E:\pg\code\220124 computer graphic\glm-0.9.8.0
SOIL2: E:\pg\code\220124 computer graphic\SOIL2-master\SOIL2-master\src
? 將所有文件復(fù)制完后的結(jié)構(gòu):
? 以上為 PDF 370 – PDF 374 的內(nèi)容,是附錄A的內(nèi)容
調(diào)試pdf 29 頁(yè)的程序
? 新建項(xiàng)目后,如何將現(xiàn)有文件夾加入vs項(xiàng)目中
參考教程:https://blog.csdn.net/weixin_44378800/article/details/106697612
? 如何將現(xiàn)有 lib 庫(kù)導(dǎo)入項(xiàng)目,右鍵項(xiàng)目,選擇“添加”-> 現(xiàn)有項(xiàng),將 lib 導(dǎo)入
? VS2017出現(xiàn)C4996 ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead.錯(cuò)誤
參考教程:https://blog.csdn.net/qq_28114615/article/details/85683550
解決辦法:
項(xiàng)目——屬性——C/C++——預(yù)處理器——預(yù)處理器定義——右側(cè)下拉框中“編輯”——在第一個(gè)編輯框中添加_CRT_SECURE_NO_WARNINGS——大功告成
? 錯(cuò)誤“main 函數(shù)已經(jīng)在main.obj 文件中定義過(guò)”,解決辦法:右鍵選中 main, 選擇“查找所有引用”,查到 dummy.cpp 文件中也有一個(gè) main 函數(shù)定義,由于 dummy.cpp 文件中沒有任何有用信息,所以更改 里面的mian 函數(shù)名稱為 main_dummy,重新編譯解決問題
? 編譯報(bào)錯(cuò),定義的 display 函數(shù)中調(diào)用了 glClearColor 和 glClear 函數(shù),“無(wú)法解析的外部符號(hào)”,所以在項(xiàng)目屬性中,配置屬性 -> 鏈接器 -> 輸入 -> 附加依賴項(xiàng)中,增加一個(gè) OpenGL32.lib -> 確定 -> 確定
? 需要XXX.lib或XXX.dll庫(kù)。手動(dòng)添加,項(xiàng)目->屬性->配置屬性->鏈接器->輸入 然后在附件依賴項(xiàng)添加XXX.lib,再生成第一個(gè)無(wú)法解析的外部符號(hào)錯(cuò)誤消失了。
? 增加 OpenGL32.lib 附加依賴項(xiàng)之后,運(yùn)行報(bào)錯(cuò),vs運(yùn)行時(shí)提示:應(yīng)用程序無(wú)法正常啟動(dòng)(oxc000007b)。請(qǐng)單擊"確定"關(guān)閉應(yīng)用程序
打開生成的 “220126 template.exe”,位置是:
E:\pg\code\220124 computer graphic\220126 template\220126 template\Debug
這個(gè)exe 文件無(wú)法順利打開,報(bào)錯(cuò)是“找不到 glew32.dll”
注意,這里是將 win32 文件夾中的 glew32.dll 放入電腦的 SysWOW64 文件夾中,也就是將32位的 dll 文件放入 系統(tǒng)對(duì)應(yīng)存儲(chǔ)64位的文件夾里。
就是從 E:\pg\code\220124 computer graphic\glew-2.1.0-win32\glew-2.1.0\bin\Release\Win32 文件夾中,復(fù)制 “glew32.dll” ,在C:\Windows\SysWOW64 文件夾中,粘貼剛剛復(fù)制的 dll 文件。
這樣就可以順利生成,結(jié)果如下:
分析2.1代碼
#include "include\GL\glew.h" #include "include\GLFW\glfw3.h"#include <iostream> using namespace std; void init(GLFWwindow* window) { } void display(GLFWwindow* window, double currentTime) {glClearColor(1.0, 0.0, 0.0, 1.0);glClear(GL_COLOR_BUFFER_BIT); } int main(void) {if (!glfwInit()) { exit(EXIT_FAILURE); }glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);GLFWwindow* window = glfwCreateWindow(600, 600, "Chapter2 - program1", NULL, NULL);glfwMakeContextCurrent(window);if (glewInit() != GLEW_OK) { exit(EXIT_FAILURE); }glfwSwapInterval(1);init(window);while (!glfwWindowShouldClose(window)) {display(window, glfwGetTime());glfwSwapBuffers(window);glfwPollEvents();}glfwDestroyWindow(window);glfwTerminate();exit(EXIT_SUCCESS);? glClearColor(1.0, 0.0, 0.0, 1.0); // 四個(gè)數(shù) (1,0,0,1)是 RGBA的格式
? GLFW 和 GLEW 庫(kù)激活函數(shù):
? glfwCreateWindow() : 用來(lái)創(chuàng)造 GLFW 窗口,長(zhǎng),寬,頂部的標(biāo)題和 對(duì)應(yīng)的內(nèi)容
? window hints 窗口提示:提示機(jī)制必須兼容 openGL 4.3,就是代碼中的:
? major = 4
? minor = 3
? glfwSwapInterval() and glfwSwapBuffers() : 用來(lái)垂直同步?
? glfwMakeContextCurrent() : 用來(lái)使得窗口的內(nèi)容顯示出來(lái)
? display() : 循環(huán)函數(shù)
? glfwSwapBuffers() : 涂屏幕窗口 paint the screen
? glfwPollEvents() : 對(duì)類似鍵盤被按下的事件做出反應(yīng)
? glfwGetTime() : 返回GLFW 初始化的時(shí)間
? glClear(GL_COLOR_BUFFER_BIT); 意思是,將顏色緩存器的顏色清理掉,重新提供預(yù)設(shè)好的顏色
? glClearColor() 就是在清理顏色緩存器之前,要提供一個(gè)顏色,以便清理緩存器后提供
? glfwDestroyWindow() and glfwTerminate() 結(jié)束這個(gè)窗口并停止
PDF31
? 補(bǔ)充知識(shí)點(diǎn):
vs中,include 其他文件夾的頭文件時(shí)候,需要用 雙引號(hào) 而不是<>,同時(shí),創(chuàng)建名為test的解決方案項(xiàng)目時(shí)候,有一個(gè)文件夾 test,里面有 test.sln 和 test 文件夾,需要引用的頭文件在子文件夾 test 中,那么就寫作 include “GL/xxx.h”,其中 GL文件夾就在 test 子文件夾中。
總結(jié)
以上是生活随笔為你收集整理的C++/OpenGL 入门(1):关于VS2017 中OpenGL部分安装过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于安装vs2015后, vs2013打
- 下一篇: 儿童素描手绘创意设计字体 for mac