1. 程式人生 > >使用Visual Studio一勞永逸式配置OpenGL開發環境(GLFW3+GLAD)

使用Visual Studio一勞永逸式配置OpenGL開發環境(GLFW3+GLAD)

引子

OpenGL版本眾多,需要引入額外的第三方庫才能很好的滿足我們平時渲染的需求,對於剛開始學習的同學們比較麻煩。
我也多次遇到很多落後的配置教程,浪費了時間不說,也會自己技術和現代OpenGL的技術脫節。
在當前的時間點(2018年),學習OpenGL如果還從glBegin()和glEnd()那一套就太落伍了,這個教程是為了示範如何配置OpenGL3.3以上的環境。
另外推薦學習OpenGL的教程:LearnOpenGL,可能需要翻牆,有中文翻譯版。
如果你想快速的開始學習OpenGL,這裡有配置好的環境:(直接使用VS2015及以上版本開啟,Win7/10實測均可)
超連結:資源
(目錄結構中用到的所有的標頭檔案、lib、dll也都在該連結中)

目錄結構

我們配置的這個環境不光是隻負責存放程式碼和第三方lib,還有一些shader檔案和資原始檔,因此需要構建一個良好的目錄結構。

配置完整的目錄結構如下:

檔名 備註
src 存放程式碼
external\include 第三方庫的標頭檔案,包含stb_image.h, glad.h, glfw.h ,assimp.h等
external\lib 第三方庫的lib
external\dll 第三方庫的dll
resources 資原始檔夾,裡面包括image,model,audiod等資料夾
vsbuild 專案資料夾,表示一個vs專案,開啟該目錄下的vsbuild.sln即可

重點介紹一下external\include下的資料夾

  • glm OpenGL的數學庫,定義了很多關於向量、矩陣的操作,簡潔迅速。
  • glfw 跨平臺的對視窗資源的一個抽象庫。
  • glad 針對不同的顯示卡驅動有不同的OpenGL實現,glad幫助我們隱藏這些差別歡快的使用OpenGL。
  • stb_image 輕量級的讀取圖片的庫
  • assimp 輕量級讀取模型的庫

可以說,我們包含了除了物理引擎和聲音控制的所有常用元件。

現在我們從頭開始構造這個目錄結構。
首先找一個空白的資料夾,在其中新建如下目錄結構:

這裡寫圖片描述
這裡我們不建立vsbuild,而是由vs來幫我們完成這件事情。
開啟Visual Studio,新建一個空專案,專案名稱為vsbuild,專案的地址為建立src、resources、external的同級目錄:

這裡寫圖片描述

建立完畢後:

這裡寫圖片描述

接下來我們就要配置lib、include引入到我們的專案中。

右鍵vsbuild專案,開啟屬性頁面:
這裡寫圖片描述

找到C/C++ Genral
這裡寫圖片描述
(注意,僅當你新建一個.cpp檔案之後才會出現C/C++選項)
編輯右側的附加目錄:

這裡寫圖片描述

注意 SolutionDir 是一個巨集,表示的是vsbuild所在的目錄,那麼根據相對路徑我們可以找到external\include。
(鍵入的資訊是 $(SolutionDir)..\external\include)。

同理,選中Linker的General的附加庫目錄

這裡寫圖片描述

開啟編輯:

這裡寫圖片描述

此外,還要開啟Linker的Input的目錄,輸入下面的值:

這裡寫圖片描述

這裡寫圖片描述

表示我們需要
glfw3.lib
glad.lib
stb_image.lib
assimp.lib
這四個庫,而這四個庫的目錄是在 $(SolutionDir)..\external\lib
(這裡我把glad和stb_image編譯成了靜態庫)
最後,因為assimp需要動態連結,我們需要把相應的dll引入到我們的專案中。
最簡便的方法如下:

這裡寫圖片描述

選中除錯,編輯環境條目:

這裡寫圖片描述

這行字串的含義是在除錯模式下,將external\dll目錄臨時新增到環境變數中,這樣我們就可以成功的動態連結了。

在配置完畢後,貼上下面的程式碼到Source.cpp,執行。

#include <glad\glad.h>
#include <glfw\glfw3.h>
#include <iostream>


void framebuffer_size_callback(GLFWwindow* window, int width, int height);

void processInput(GLFWwindow *window);



// settings

const unsigned int SCR_WIDTH = 800;

const unsigned int SCR_HEIGHT = 600;



int main()

{

    // glfw: initialize and configure

    // ------------------------------

    glfwInit();

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);

    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);

    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);



#ifdef __APPLE__

    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // uncomment this statement to fix compilation on OS X

#endif



                                                         // glfw window creation

                                                         // --------------------

    GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);

    if (window == NULL)

    {

        std::cout << "Failed to create GLFW window" << std::endl;

        glfwTerminate();

        return -1;

    }

    glfwMakeContextCurrent(window);

    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);



    // glad: load all OpenGL function pointers

    // ---------------------------------------

    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))

    {

        std::cout << "Failed to initialize GLAD" << std::endl;

        return -1;

    }



    // render loop

    // -----------

    while (!glfwWindowShouldClose(window))

    {

        // input

        // -----

        processInput(window);



        // render

        // ------

        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);

        glClear(GL_COLOR_BUFFER_BIT);



        // glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)

        // -------------------------------------------------------------------------------

        glfwSwapBuffers(window);

        glfwPollEvents();

    }



    // glfw: terminate, clearing all previously allocated GLFW resources.

    // ------------------------------------------------------------------

    glfwTerminate();

    return 0;

}



// process all input: query GLFW whether relevant keys are pressed/released this frame and react accordingly

// ---------------------------------------------------------------------------------------------------------

void processInput(GLFWwindow *window)

{

    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)

        glfwSetWindowShouldClose(window, true);

}



// glfw: whenever the window size changed (by OS or user resize) this callback function executes

// ---------------------------------------------------------------------------------------------

void framebuffer_size_callback(GLFWwindow* window, int width, int height)

{

    // make sure the viewport matches the new window dimensions; note that width and 

    // height will be significantly larger than specified on retina displays.

    glViewport(0, 0, width, height);

}

最後顯示出如下視窗說明你配置成功了。

相關推薦

使用Visual Studio一勞永逸配置OpenGL開發環境GLFW3+GLAD

引子 OpenGL版本眾多,需要引入額外的第三方庫才能很好的滿足我們平時渲染的需求,對於剛開始學習的同學們比較麻煩。 我也多次遇到很多落後的配置教程,浪費了時間不說,也會自己技術和現代OpenGL的技術脫節。 在當前的時間點(2018年),學習OpenGL

windows通過Visual Studio Code中配置GO開發環境(轉)

fin gpe def 微軟 sqs oba 安裝插件 包括 ont 一、GO語言安裝 詳情查看:GO語言下載、安裝、配置 二、GoLang插件介紹 對於Visual Studio Code開發工具,有一款優秀的GoLang插件,它的主頁為:https://gith

Visual Studio Code中配置GO開發環境

轉自:https://www.cnblogs.com/zsy/archive/2016/02/28/5223957.html一、GO語言安裝二、GoLang外掛介紹這款外掛的特性包括:Colorization 程式碼著彩色Completion Lists 程式碼自動完成(使用

ubuntu下配置python開發環境Eclipese+Pydev

大家都知道,ubuntu中自帶了python,不用安裝,直接就可以在編寫執行python。個人覺得這是ubuntu最大的優點之一,windows什麼都要再裝,而且還那麼大。。。 當然,工欲善其事,必先利其器。現在很少有人寫程式不用IDE了,寫python固然也有一些獨立的ID

Visual Studio 2017上配置OpenGL程式設計指南第8版開發環境

一直想學習一下OpenGL,買了紅寶書第8版,卻因為工作原因一直沒有時間看,最近利用週末嘗試了一下配置開發環境,遇到了一些坑點,現在記錄下來備用。 第一步:開啟Visual Studio 2017,建立一個空的C++工程 第二步:新建triangles.cpp檔案,並寫入書本例子中的程式碼 /

VS2013+GLFW+GLEW 配置OpenGL開發環境

轉載:http://blog.csdn.net/u011926277/article/details/50912638         最近發現了一個非常好的學習OpenGL基礎的網站,點選開啟連結。由於當中配置環境部分說得不是很詳細,經過許多天的掙扎後

Visual Studio Code 構建C/C++開發環境

window 引用 color ron 觀察 code ber 編譯 圖形 轉自:https://blog.csdn.net/lidong_12664196/article/details/68928136#visual-sutdio-code以及cc插件安裝    

徐鬆亮軟體應用教學-基於Visual Studio Code的C語言開發環境搭建

工欲善其事,必先利其器。後續,本博主要帶領大家,會做多種資料演算法和資料結構的實現,比如說記憶體管理,排序,三次樣條,二叉樹,九宮格,蟻群演算法。。。這些主要用C語言來實現。雖然其他語言有現成的庫,但因為本人主要擅長的是做嵌入式產品開發,目前大多數嵌入式晶片資源仍然有

Linux 下配置OpenGL開發環境

Linux 下配置OpenGL開發環境 sudo apt-get install build-essential sudo apt-get install libgl1-mesa-dev sudo apt-get install libglu1-mesa-dev su

Visual Studio2015中搭建OpenGL開發環境win10

一、下載OpenGL的GLUT庫 Windows環境下的GLUT官方下載地址:(蘋果機不需要安裝,自帶) OpenGL全部標頭檔案和庫檔案(不包括顯示卡自帶的) 連結: http://pan.baidu.com/s/1i3YKhBv  密碼:5x5t 二、O

VS配置OpenGL開發環境:GLFW庫和GLAD庫的配置

1.去GLFW官網下載相應版本的配置檔案:點選開啟連結,無論你的系統是32位還是64位,都建議下載32位的配置檔案,如下圖: 去GLAD線上服務獲得glad.h配置檔案點選開啟連結,按照下圖的資訊填寫,獲得glad.zip檔案: 2.將下載的檔案解壓,得到VS各個版本

vue.js+vscode+visual studio在windows下搭建開發環境

ebp RoCE 如果 裝包 rst win pack cnpm 基於web 第一步:準備工作1.nodejs官網 http://nodejs.cn/ 下載安裝包或鏡像例如8.1.2版本:http://cdn.npm.taobao.org/dist/node/latest-

python分布爬蟲搭建開發環境

back col 性能 16px 動態網頁 網頁 ebs {} 常見類 scrapy 優勢: resquests和Beautifulsoup都是庫,scrapy是框架 scrapy框架可以加入前兩項 scrapy基於twisted,性能是最大的優勢 scrapy方便擴展,

NotePad++配置python開發環境windows

python代碼 當前 ctr sharp gpo 菜單 一行 post 執行 一、安裝python插件 1.插件->Plugin Manager->Show Plugin Manager, Available標簽頁, 2.搜索python,任意下載一個pyth

ubuntu18.04.1下配置前端開發環境nvm,nvm安裝不成功的解決辦法

# Proxy alias setproxy="export ALL_PROXY=socks5://60.205.84.96:10086" alias unsetproxy="unset ALL_PROXY" 寫到 ~/.bashrc 最後面 然後,退出當前的 terminator 再開

SublimeText配置Python開發環境互動、快捷開啟 REPL、自動補全,側邊欄等

SublimeText配置Python開發環境(互動、快捷開啟 REPL、自動補全等) 0.效果圖: 主題是:Blackboard 1. 基礎配置、包安裝等基礎操作參考:sublime tex

Qt for Linux:樹莓派3配置Qt開發環境Qt 5.9.1 和 OpenCV 2.4.13

關於樹莓派 我用的是 樹莓派樹莓派3代B型 Raspberry Pi Model 3 B 我拿來是做監控視訊採集的,所以會用到 Qt 和 OpenCV 開發上,除了視訊採集和視訊檔案生成用的OpenCV,其他全部Qt 本篇文章只涉及樹莓派的配置,不涉及具

【Julia】Linux下配置Julia互動開發環境Julia notebook

0x00 前言 近期Julia這門語言突然被拉入了大眾視野,我也是被一句 “Walk as Python,Run as C” 深深的吸引住了, 如果它沒有在吹牛,那麼這門語言說不定確實是我所想要的,那麼,學學看吧? 本篇文章主要用於介紹如何搭建便於學習與測

配置便捷的開發環境PyCharm & Jupyter

由於在PyCharm中進行統計整理資料、畫圖等操作有諸多的不便。在本地的jupyter notebook進行處理又顯得步驟繁瑣(傳輸檔案),故萌生在伺服器搭建jupyter notebook的想法。兩種工具優勢互補,從而最大程度上集中注意力在專案本身,提升開發效

在Linux系統配置PHP開發環境CentOS

一、使用FileZilla將虛擬機器的伺服器連線起來1、ifconfig獲取虛擬機器的IP地址2、在FileZilla輸入各項資訊進行連線    注:①使用管理員的賬號進行連線   如此才能訪問到根目錄。           ②埠號:大部分都是預設不輸入,我的偏偏要輸入22才