前言
圖形編程一直以來都是計(jì)算機(jī)科學(xué)中最具挑戰(zhàn)性的主題之一。隨著限制VR技術(shù)的興起,越來越多的公司開始涉足VR領(lǐng)域。目前來看使用最多的是Unity3d來開發(fā),但是像瀏覽器,將2D應(yīng)用3D化(把2D的應(yīng)用界面投到一個(gè)3D的場景中,用戶可以通過手柄操作2D界面)這些需求都需要對(duì)3D圖形編程很熟悉才能做好這些炫酷的場景。而現(xiàn)在的圖形編程都是基于圖形庫來完成,即程序員通過調(diào)用一個(gè)預(yù)先定義的庫或者是一系列的庫中的函數(shù),由這些庫來提供對(duì)底層圖形操作的支持。
現(xiàn)在的市場上有很多的圖形庫,但是常見的平臺(tái)無關(guān)的圖形庫叫做OpenGL(Open Graphics Libary)。本系列的博客也是要介紹如何在C++中使用OpenGL進(jìn)行3D圖形編程。在介紹使用OpenGL進(jìn)行3D圖形編程之前,我們先做一個(gè)入門必過的坎-------OpenGL的開發(fā)環(huán)境配置準(zhǔn)備。
1.環(huán)境配置準(zhǔn)備
俗話說:“萬事開頭難”,很多同學(xué)都是對(duì)OpenGL很感興趣,但是動(dòng)手做時(shí)被環(huán)境的配置階段就勸退了,所以本文將全面介紹OpenGL開發(fā)環(huán)境相關(guān)庫的配置,降低對(duì)OpenGL感興趣的同學(xué)的入門門檻。首先我們先介紹下在C++中使用OpenGL需要用到的環(huán)境和庫,如下所示:
開發(fā)IDE: Visual Studio2022,其他版本的也行,配置大同小異
OpenGL/GLSL
窗口管理庫(GLFW)
擴(kuò)展庫(GLEW)
數(shù)學(xué)庫(GLM)
紋理圖像加載庫(SOIL2)
下面我們就開始準(zhǔn)備配置上面列出的環(huán)境,OpenGL/GLSL不用我們配置,系統(tǒng)默認(rèn)就帶了,GLSL是著色器語言,在OpenGL2.0版本引入的。這個(gè)引入使得程序員可以通過編寫著色器語言實(shí)現(xiàn)更多更逼真的效果。
2.下載相關(guān)庫
2.1 下載窗口管理庫(GLFW)
OpenGl 實(shí)際上并不是把圖像直接繪制到計(jì)算機(jī)屏幕上,而是將其渲染到一個(gè)幀緩沖區(qū)中,然后由計(jì)算機(jī)來負(fù)責(zé)把幀緩沖區(qū)的內(nèi)容繪制到屏幕上的一個(gè)窗口中。完成這個(gè)功能就可以選擇使用GLFW庫來實(shí)現(xiàn),這個(gè)庫支持Windows,MacOS,Linux以及其他的操作系統(tǒng),我們可以從官網(wǎng)上獲?。?br>GLFW 官網(wǎng)下載地址
如果是CSDN會(huì)員的可以去資源里面下載,不需要積分,沒有會(huì)員的就直接去官網(wǎng)下載,沒必要為了下載一個(gè)資源去花錢開會(huì)員:
GLFW CSDN下載地址
2.2 下載OpenGL擴(kuò)展庫
GLEW(OpenGL extension wrangler),即OpenGL擴(kuò)展牛仔,OpenGL是圍繞一組基本功能和擴(kuò)展機(jī)制進(jìn)行組織的,隨著技術(shù)的發(fā)展,擴(kuò)展機(jī)制可以用來支持新的功能,所以GLEW 就是用來干這個(gè)活的。下載這個(gè)庫同樣是給讀者兩個(gè)地址:
GLEW官網(wǎng)下載地址
GLEW CSDN下載地址
2.3 下載OpenGL數(shù)學(xué)庫
GLM是OpenGL Mathematics數(shù)學(xué)庫,,它是一個(gè)只有頭文件的C++庫,兼容Windows,MacOS和Linux,它可提供與圖形概念相關(guān)的類和基本數(shù)學(xué)函數(shù),例如矢量,矩陣和四元數(shù),它還包含各種工具類,用于創(chuàng)建和使用常見的3D圖形結(jié)構(gòu),例如透視矩陣和視角矩陣
GLM官網(wǎng)下載地址
GLM CSDN下載地址
2. 4 紋理圖像加載庫SOIL2 下載
SOIL2用于加載OpenGL的圖像紋理,我們從零開始編寫一個(gè)紋理圖像加載器是可以做到的,但是考慮到各種各樣的圖像文件格式,使用一個(gè)紋理圖像加載庫通常是更明智的選擇,安裝集成SOIL2圖像紋理加載庫需要我下載SOIL2庫和一個(gè)輔助工具premake
SOIL2 GitHub下載
premake 工具官網(wǎng)下載
SOIL2 CSDN下載
premake 工具CSDN下載
3.準(zhǔn)備共享的庫文件(lib)和include文件夾
因?yàn)樵赪indows上開發(fā)OpenGL需要配置環(huán)境,所以我們最好的方式是將OpenGL的開發(fā)環(huán)境配置成一個(gè)項(xiàng)目模板,這樣就可以在每次新建OpenGL項(xiàng)目時(shí)可以基于我們事先配置好的模板開發(fā)。而在做項(xiàng)目模板之前,我們需要把對(duì)應(yīng)的庫找一個(gè)地方放起來,然后在Visual Studio中去建立庫的引用 ,首先我們需要選擇一個(gè)位置存放我們的庫文件,這里可以選擇存放到任何位置。下圖是文件夾的文件夾結(jié)構(gòu)。
根據(jù)上面的庫文件結(jié)構(gòu)圖,我們?nèi)?dòng)手實(shí)踐下,在這里我是在我的D盤創(chuàng)建了一個(gè)文件夾存放OpenGL的這些相關(guān)庫。創(chuàng)建完庫文件的架構(gòu)后,我們開始去準(zhǔn)備對(duì)應(yīng)的庫
3.1準(zhǔn)備窗口管理庫GLFW
我們前面下載好GLFW的壓縮包后解壓,會(huì)得到一個(gè)如下的目錄解壓后我們可以看到有不同版本的Visual Studio的lib,我用的是Visual studio 2022,所以我將lib-vc2022下的內(nèi)容全部復(fù)制到我之前創(chuàng)建的
D:\OpenGL\OpenGLTemplate\lib
這個(gè)路徑下,然后回到我們解壓得到的glfw文件夾下,就是上圖的文件夾下,點(diǎn)擊include會(huì)發(fā)現(xiàn)其 目錄下有一個(gè)GLFW目錄,將整個(gè)目錄復(fù)制到我們創(chuàng)建的OpenGLTemplate文件夾下的include目錄下,路徑為:D:\OpenGL\OpenGLTemplate\include
,至此,GLFW的準(zhǔn)備工作完成。
3.2 準(zhǔn)備OpenGL擴(kuò)展庫GLEW
同樣,將前面獲取到的GLEW壓縮包解壓,會(huì)得到如下圖所示的文件結(jié)構(gòu):解壓得到glew庫后,點(diǎn)擊lib->Release->x64下的庫,全部復(fù)制到我們創(chuàng)建的OpenGLTemplate文件夾下的lib目錄里:路徑
D:\OpenGL\OpenGLTemplate\lib
,接著回到我們解壓的glew目錄下,找到include目錄,點(diǎn)開后發(fā)現(xiàn)里面有一個(gè)GL目錄,將其全部復(fù)制到OpenGLTemplate下的include目錄下。路徑:D:\OpenGL\OpenGLTemplate\include
至此,GLEW庫的集成完成。
3.3 準(zhǔn)備OpenGL數(shù)學(xué)庫GLM
這個(gè)庫的集成比較簡單,我們獲取到這個(gè)庫的壓縮包后解壓,會(huì)得到如下圖所示的目錄 我們直接把解壓后目錄下的glm目錄整個(gè)復(fù)制到我們創(chuàng)建的OpenGLTemplate目錄下的include目錄下。glm庫就集成完了
3.4 準(zhǔn)備紋理圖像加載庫SOIL2
SOIL2的集成稍微麻煩點(diǎn),我們需要premake工具的協(xié)助,我們首先獲取SOIL2的zip后解壓,然后獲取到premake的zip壓縮包解壓,premake解壓后會(huì)得到一個(gè)premake5.exe,將其復(fù)制到我們解壓后的SOIL2目錄下。如果讀者是從我提供的CSDN下載地址獲取的SOIL2里面是我編譯好了的,可以直接使用。如果是從官網(wǎng)下載的,需要我們編譯一下。獲取到premake的壓縮包后解壓得到下面的目錄
將premake5.exe復(fù)制到我們解壓后的SOIL2目錄下,即
D:\OpenGL\installPKG\SOIL2-1.3.0
下,然后。然后在SOIL2-1.3.0下運(yùn)行CMD命令行:輸入命令:
premake5 vs2022
注意,vs2022是我的visual studio的版本,具體的版本根據(jù)安裝的版本來定
運(yùn)行上面的命令后會(huì)在SOIL2-1.3.0下生成一個(gè)make目錄接著我們進(jìn)入make->windwos目錄下:
使用Visal Studio打開上圖中紅框標(biāo)記的文件。
打開上面的文件后如圖所示,這時(shí)我們點(diǎn)擊鼠標(biāo)右鍵,在彈出的菜單中選擇生成,生成結(jié)束后關(guān)閉Vsual Studio,這時(shí)SOIL2-1.3.0目錄下會(huì)多一個(gè)lib,如下所示
接下來我們將lib下的庫全部復(fù)制到我們之前創(chuàng)建的OpenGLTemplate目錄下的lib目錄下。然后回到SOIL2目錄下,將src->SOIL2目錄全部復(fù)制到OpenGLTemplate目錄下的include目錄下。這樣我們的圖像紋理加載庫SOIL2就集成完了。
到這里,我們對(duì)比下我們之前給到的OpenGLTemplate的文件目錄圖發(fā)現(xiàn),還差一個(gè)glew32.dll文件需要放到OpenGLTemplate目錄下,沒有 這個(gè)庫我們是無法運(yùn)行OpenGL的代碼的,這個(gè)庫位于我們解壓后的Glew目錄下,我們找到解壓的Glew目錄,然后在其bin->Release->x64下找到這個(gè)庫
將其復(fù)制到OpenGLTemplate目錄下, 然后我們的庫就準(zhǔn)備完了。接下來我們制作一個(gè)OpenGL的項(xiàng)目啟動(dòng)模板
4.使用Visual Studio 制作OpenGL項(xiàng)目模板
4.1 模板配置
打開我們的Visual Studio,然后創(chuàng)建一個(gè)新的C++空項(xiàng)目創(chuàng)建設(shè)置好名字后打開,比如這里我們叫OpenGLTemplate,然后打開
我們先配置Debug模式下的庫引用
我們找到項(xiàng)目->屬性打開屬性配置界面,然后將我們之前的OpenGLTemplate目錄下的include路徑配置到下圖中標(biāo)記的“包含目錄”下。然后我們還是在Visual Studio的屬性設(shè)置面板上找到“鏈接器->常規(guī)”然后將我們之前準(zhǔn)備的OpenGLTemplate目錄下的lib目錄配置到這里
然后我們同樣在“鏈接器->輸入->添加依賴項(xiàng)”下,將OpenGLTemplate目錄下的lib中的glfw3.lib、glew32.lib、soil2-debug.lib、opengl32.lib(應(yīng)該已經(jīng)是WindowSDK的一部分了,不配置也行,但是為了保險(xiǎn)還是配置上)
配置完以后保存,然后再切換到Release模式,重復(fù)的操作再配置一遍這里就不贅述了。
4.2 模板導(dǎo)出
點(diǎn)擊完成后,我們?cè)俅涡陆?xiàng)目時(shí)就會(huì)發(fā)現(xiàn)多了一個(gè)項(xiàng)目模板,如下所示:
我們點(diǎn)擊自己定義的這個(gè)模板就可以創(chuàng)建OpenGL項(xiàng)目了。
5.測試OpenGL環(huán)境
首先在項(xiàng)目的源文件目錄右鍵新建一個(gè)cpp文件:FirstOpenGLDemo.cpp輸入代碼:
#include<GL/glew.h>
#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, "OpenGl-Demo", 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);
}
這時(shí)候我們發(fā)現(xiàn)相關(guān)的庫都可以引用成功了,但是運(yùn)行不起來,會(huì)報(bào)下面的錯(cuò)誤這時(shí)就需要把我們之前放在OpenGLTemplate目錄下的glew32.dll動(dòng)態(tài)鏈接庫放到,我們項(xiàng)目的目錄的同名目錄下。
這時(shí)后我們?cè)龠\(yùn)行代碼,就會(huì)發(fā)現(xiàn)運(yùn)行成功了。
我們上面的代碼就是簡單的展示了一個(gè)紅底的背景,至此,OpenGL開發(fā)環(huán)境的配置全部完成文章來源:http://www.zghlxwxcb.cn/news/detail-432968.html
總結(jié)
本文主要介紹了在Windows10上的Visual Studio 2022上搭建OpenGL開發(fā)環(huán)境,主要介紹了窗口管理庫GLFW、OpenGL擴(kuò)展庫GLEW、OpenGL數(shù)學(xué)庫GLM和圖像紋理加載庫SOIL2的配置和集成,最后自定義了一個(gè)Visual Studio項(xiàng)目模板,并且最后用一個(gè)測試Demo測試了我們配置的環(huán)境,其中比較遺憾的就是glew32.dll必須我們手動(dòng)復(fù)制到項(xiàng)目的指定目錄,否則無法運(yùn)行OpenGL程序。這里如果讀者有更好更方便的辦法,歡迎評(píng)論區(qū)交流。文章來源地址http://www.zghlxwxcb.cn/news/detail-432968.html
到了這里,關(guān)于OpenGL開發(fā)必過的坎------開發(fā)環(huán)境的準(zhǔn)備(Windows10)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!