天天看點

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

目錄

  • 前言
  • OpenGL是什麼
  • 依賴的庫
    • GLEW
    • freeglut
    • glm
  • 開發環境
    • visual studio
    • vcpkg
  • 小結之環境配置
  • 使用vcpkg安裝c++庫
  • 你好!視窗
  • 總結

前言

來開坑了。。。快進到挖坑不填

怎麼說呢?感覺學校教的圖形學,有點囫囵吞棗的感覺,害得課後自己琢磨琢磨才能玩明白。

還有一個原因是現在網上到處都是各種OpenGL的部落格,但是大多都是引了一堆頭檔案,一頓操作,代碼很多。過度的封裝,導緻我根本不知道其代碼實作邏輯。

前幾天我想實作一個shadowmapping,都要查半天的資料,看一堆部落格,導緻學習體驗很不好。。。于是自己開坑記錄下自己學習的過程。

代碼方面,我盡量保證 每篇部落格有且僅有一個 .cpp 檔案,争取做到複制即可運作。(快進到自己罵自己:”🐖β吧我是“

OpenGL是什麼

參考:https://www.khronos.org/opengl/wiki/

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

OpenGL,世界上最陰間的API ,可以了解為一組包含操作圖像圖形的函數的API,但是其實它是一個規範,為了跨平台而制定,不同的平台,都需要按照這一規範進行實際的開發。

依賴的庫

我們基于c++進行OpenGL的學習,本章節介紹c++中OpenGL程式設計所必要的庫。如同深度學習有tensorflow,背景服務有node.js。通過c++實作圖形學程式設計,也需要有庫幫助我們。

需要的庫一共有三個,他們分别是:

  1. freeglut
  2. GLEW
  3. glm

下面單獨介紹下:

GLEW

參考:http://glew.sourceforge.net/basic.html

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

因為OpenGL負責指定規範,而顯示卡廠商負責在其驅動程式中實作這些接口。那麼不同的廠商對于OpenGL标準的實作和擴充都不同。

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結
引自:https://learnopengl-cn.readthedocs.io/zh/latest/01%20Getting%20started/02%20Creating%20a%20window/

是以我們需要一個能夠發現并且加載這些接口的庫。

freeglut

參考:http://freeglut.sourceforge.net/docs/api.php

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

顯示圖形,首先必須有視窗。因為在不同平台下,視窗的控制不盡相同,OpenGL有意将這些操作抽象出來,以便跨平台實作OpenGL。

在c++下,比較流行的視窗控制的庫就是freeglut了,它允許我們建立OpenGL上下文,并且處理使用者的各種輸入,比如滑鼠或者是鍵盤等等,提供一個 “互動式” 的開發環境。

glm

參考:http://glm.g-truc.net/0.9.8/api/index.html

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

說到圖形學就不得不提各種矩陣,向量運算。而我們cpu要向GPU傳遞資料,就必須用到矩陣,向量等類型,而這些類型是c++ STL所不具備的,于是我們需要glm庫作為拓展。

線性代數老師:還就内個逮到!

開發環境

介紹主要的開發環境及其工具。

visual studio

說到c++程式設計,就不得不提我們的開發環境了。微軟為我們提供了一個友善的解決方案 — visual studio

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

visual studio 具有管理大型c++工程的能力,并且提供良好的debug和release,此外,vs community 是免費使用的!

在其 官網 可以快速的開始下載下傳

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

vcpkg

此外,和任何包依賴的語言一樣(比如python的pip或者node.js的npm),我們也需要對應的包管理工具,這個工具叫 vcpkg。

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

在其 官方網站 也可以快速找到安裝的門路。

vcpkg 需要 git 的支援。請将 git 加入環境變量。此外,vcpkg還需要用到 cmake,如果沒有安裝,将會自動安裝。

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

小結之環境配置

一圖流。。。

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

總之就是。。。唔。。。我們需要安裝 ⑤ 樣東西:

  1. visual studio
  2. vcpkg

其中三個c++庫(GLEW,freeglut,glm)我們通過 vcpkg 來進行安裝。

使用vcpkg安裝c++庫

假設我們已經成功安裝vcpkg,那麼我們在 power shell 或者 cmd 中運作指令:

vcpkg install xxx
           

即可安裝對應的包。假如安裝過程很卡,一直下載下傳不下來,比如:

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

我們就可以手動用浏覽器通路上圖中畫紅框的位址并且手動下載下傳(你可以爬梯什麼的)

我們以安裝glm庫為例:首先我們複制下載下傳好的檔案到 downloads 目錄

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

然後先正常啟動一次 vcpkg install 指令,發現 temp 檔案夾裡面有一個臨時檔案,我們把下載下傳好的檔案重命名成這個名字,然後丢進temp目錄。

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

我們打開 power shell,然後再次執行 install 指令

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

我這裡安裝 glm 包,必須指定x86的版本,否則vs找不到路徑,目前原因不明,可能是vcpkg預設的include路徑就是x86路徑

最好同時安裝 x86 和 x64 的版本。。。

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

運作指令檢視是否安裝成功:

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

最後一步:我們運作指令,将 vcpkg 聚合到 visual studio,注意需要管理者權限

vcpkg integrate install
           

出現綠色字型說明聚合成功!

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

你好!視窗

安裝完畢。我們開始進行OpenGL的第一個程式設計。我們建立一個視窗,但是不繪制任何東西(隻是為了驗證)

首先使用 visual studio 建立工程:

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

dddd

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

dddd

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

随後我們編寫 main 函數,我們測試安裝的三個庫是否都能夠順利運作。下面是代碼:

#include <iostream>
#include <GL/glew.h>
#include <GL/freeglut.h>
#include <glm/glm.hpp>

// 顯示回調函數 -- 咱啥也不做
void display()
{

}

int main(int argc, char** argv)
{
    // ---- freeglut測試 ----//
    glutInit(&argc, argv);              // glut初始化
    glutInitDisplayMode(GLUT_RGBA);     // 顯示模式 -- RGBA
    glutInitWindowSize(512, 512);       // 視窗大小
    glutCreateWindow("hello window");   // 标題
    glutDisplayFunc(display);           // 設定顯示回調函數 -- 每幀執行
    glutMainLoop();                     // 進入主循環

    // ----   GLEW測試   ----//
    GLuint vao;
    glGenBuffers(1, &vao);              // 建立頂點數組對象
    glBindVertexArray(vao);             // 綁定vao

    // ----   glm測試    ----//
    glm::vec3 myColor(1.0, 0.5, 0.2);   // 建立三維向量
    glm::mat4 myMatrix();               // 建立矩陣

    return 0;
}
           

嚴格意義上來說,這段代碼的邏輯是錯的。但是如果我們能夠通過編譯并且運作産生一個純白的窗體,說明我們環境配置成功!

OpenGL學習(一) freeglut / GLEW 環境搭建與視窗建立前言OpenGL是什麼依賴的庫開發環境小結之環境配置使用vcpkg安裝c++庫你好!視窗總結

總結

肝了一晚上,👴去睡了。俗話說萬事開頭難,OpenGL環境的配置是最搞心态的。但是我們仍然跌跌撞撞的完成了(當然中間會遇到很多的問題 Orz)

繼續閱讀