主要是針對openGL的一些初步的學習,因為openCV主要是處理影像視頻,是從現有的得到資料,而openGL好像是從資料進行繪圖,學習一下,在《計算及圖形學編程》一書中,它把圖形編程定性為著色器編程,相對于C/C++這種,就可謂是兩種明線了,C/C++到了后期要進行編譯器調優,估計圖形編程也是如此,需要針對著色器,不過目前還是先學習其用,
這里的openGL(Open Graphics Library,開放圖形庫),說是平臺無關的圖形編程庫,很多人現在都把它說成是一個標準,一個規范,我也不太確定,
視窗管理,GLFW
在openGL中,影像會渲染到一個幀緩沖區,然后再由機器負責繪制幀緩沖區的內容,能進行這種作業的有GLUT庫、CPW庫、GLOW庫和GLUI庫,但GLUT太老了,已經演變成freeglut,這里選擇的是GLFW視窗管理庫,需要編譯安裝,因為glfw都是編譯安裝的,所以還是先裝個cmake,到官網直接下載msi來安裝就行,
cmake下載路徑
因為installer可以幫你添加環境變數,這樣也懶得重啟電腦了,現在是能不重啟就不重啟,安裝好以后測驗看看環境變數配好了沒,cmake --version,能成功回應就ok,
然后下載glfw的編譯安裝包:
GLFW官網
從我找到的資訊來看,很多openGL的庫都是比較老的了,所以這也是為了學習而使用的,這個鏈接也不知道什么時候會失效,且用且珍惜吧,下載好以后就正常解壓,然后進入對應glfw檔案夾,進行編譯安裝,
打開cmake的GUI后,拖動GLFW的cmakelist到其中,然后configure一下,設定好自定義引數后,如果高亮就在configure一下,就開始generate;cmake的作業就到這一步,接下來是vs的作業了,到編譯后檔案下,vs打開GLFW.sln檔案,然后批生成下勾選ALL BUILD和INSTALL的debug和release選項,一個是除錯模式一個是發布模式,兩種編譯模式都選好以后就開始生成,到這一步,src下有對應的兩種模式的lib即可,然后這里GLFW環境就算配置好了,
擴展庫,GLEW
openGL中,有著基本功能和擴展機制,其中的擴展機制就是屬于一個自定義內容了,用來支持新的功能,其實,這里針對的是openGL中的現代命令,這些命令的執行需要定量的代碼,用擴展庫來處理這些細節就成了標準做法,GLEW(OpenGL Extension Wrangler),openGL擴展牧馬人,但除去這個還有備選,比如GL3W和GLAD,這些都可自動更新,但需要python支持,回歸正題,GLEW需要從sourceforge上下載壓縮包,得到對應glew32.lib和glew32.dll以及對應頭檔案,鏈接如下:
GLEW下載
實際上是官網,在上面有跳轉到sourceforge的鏈接,auto select也是挺快的,不過這個版本更新也是絕了,07年,呵呵,
數學庫,GLM
3D圖形編程需要大量使用向量和矩陣代數(看來要復習了),一個配合常見數學計算任務的函式庫和類包顯得至關重要,常見的有Eigen和vmath,但這里使用的是數學庫GLM(OpenGL Mathematics),直接百度GLM安裝,然后它就跳到sourceforge頁面了,干脆在這里搞定吧,好,壓縮包get,打開以后,居然是cmakelist包,不過glm下面也有對應hpp檔案,所以暫時還是不做操作,
紋理影像加載庫,SOIL2
SOIL2是影像加載庫SOIL的更新分叉版本,這里的東西實在是太老舊了,不是學習的話好像都不想用它,這里就做詳細點的記錄吧,
首先是安裝軟體的premake4的下載安裝
premake4下載頁面
下載好以后就接著下載SOIL2專案檔案,原本是github的習慣就是發布檔案放release嘛,它倒好,直接有鏈接沒東西,好吧,git clone吧,
clone完畢后,把premake5.exe可運行檔案解壓到此檔案夾,然后右鍵打開命令列,輸入./premake5.exe vs2022,因為我沒有為premake配置環境變數,所以這樣的方式進行,而且我的vs版本是2022,完了后可以看到以下內容:
PS D:\source code\SOIL2-master> ./premake5.exe vs2022
Building configurations...
Running action 'vs2022'...
Generated make/windows/SOIL2.sln...
Generated make/windows/soil2-static-lib.vcxproj...
Generated make/windows/soil2-shared-lib.vcxproj...
Generated make/windows/soil2-test.vcxproj...
Generated make/windows/soil2-test.vcxproj.filters...
Generated make/windows/soil2-perf-test.vcxproj...
Generated make/windows/soil2-perf-test.vcxproj.filters...
Done (74ms).
PS D:\source code\SOIL2-master>
然后又是vs的時間了,在下面路徑vs打開sln檔案

然后右鍵選中soil2-static-lib選項,右鍵生成,就可以得到lib檔案了,

目前主要使用的就是src下SOIL2檔案夾里面的頭檔案和新生成的soil2-debug.lib庫檔案(新生成的lib檔案夾下可尋),
配置openGL庫檔案夾
其實就是為了方便vs,特地把上面的頭檔案和庫檔案都集中在一起,自定義一個專門目錄新建一個include和lib檔案夾,然后把上面對應的頭檔案夾給復制過去,還有庫檔案給復制過去就行,
include檔案夾:GLFW檔案夾、GL檔案夾、glm檔案夾、SOIL2檔案夾;
lib檔案夾:glfw3.lib、glew32.lib、soil2-debug.lib
還可以把GLFW的glew.dll檔案放上面兩個同級路徑,然后就湊成了一個基本的openGL庫結構,

不過我好像犯了個錯誤,在我實際操作vs進行小實驗的時候,才發現,即使引入了上面的頭檔案,vs也一樣無法識別到,簡直是怪圈,那么垃圾的,沒辦法,只能根據各前人的經驗,放vs對應的include和lib目錄下了,
因為vs就算是自定義了安裝目錄,它也還是把一大堆東西放在c盤,這個沒辦法,和你的用戶目錄掛鉤的,我找vs內置的include的辦法就是直接輸入#include
然后把我先前include檔案夾下所有檔案夾(GL、GLFW、glm、SOIL2)都給復制過去,還有lib下的也是,對應好路徑關系就找得到的,還是比較簡單的,我這里的vs2022對應的兩個內置路徑是:
C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22000.0\um\x64
嗯,還有動態庫要配置,這個就直接放專案檔案夾下就行,就一個glew.dll,
簡單測驗
#include <GL/glew.h>
#include <glfw/glfw3.h>
#include <iostream>
#pragma comment(lib, "glew32.lib")
#pragma comment(lib, "glfw3.lib")
//作為標準提供在windows SDK中,但需要引入
#pragma comment(lib, "opengl32.lib")
using namespace std;
//繪制window表單內容
void display(GLFWwindow *window, double currentTime) {
//繪制紅色背景
glClearColor(1.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
}
int main() {
//初始化GLFW庫
if (!glfwInit())
exit(EXIT_FAILURE);
//創建GLFW視窗和相關openGL背景關系,并指定機器主次版本兼容openGL4.3
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
//創建一個寬高都為600像素的標題為none的、后面兩個引數設定全屏顯示和資源共享,暫時用NULL引數替代
GLFWwindow *window = glfwCreateWindow(600, 600, "none", NULL, NULL);
//把windows物件和當前openGL背景關系相關聯
glfwMakeContextCurrent(window);
//初始化GLEW庫
if (glewInit() != GLEW_OK)
exit(EXIT_FAILURE);
//開啟垂直同步
glfwSwapInterval(1);
//簡單的渲染回圈
while (!glfwWindowShouldClose(window)) {
display(window, glfwGetTime());
//繪制螢屏
glfwSwapBuffers(window);
//等待事件的處理,比如按鍵點擊退出
glfwPollEvents();
}
//逐一操作以釋放視窗物件
glfwDestroyWindow(window);
glfwTerminate();
exit(EXIT_SUCCESS);
}
//openGL背景關系,openGL實體及狀態資訊等,包括顏色緩沖區等
因為已經提前把glew.dll放在專案路徑下了,所以基本是沒啥問題了的,運行結束就會出現一個紅色視窗,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/533533.html
標籤:其他
上一篇:沒事練練題一
下一篇:Prometheus
