LearnGL - 08.0.1 - Camera - GLM版前置篇


LearnGL - 學習筆記目錄

本人才疏學淺,如有什麼錯誤,望不吝指出。

上一篇:LearnGL - 08 - Camera - linmath.h 版,瞭解OpenGL 的一些幾何變換,其中包含了攝像機的封裝。

這一篇:因爲 上次封裝使用的 Camera 使用的線性代數庫 是: linmath.h ,使用起來很不方便,所以這邊我們先了一下:GLM,後面再實現一篇 GLM 的 Camera,並將之前所有用到 linmath.h 的地方的內容,都改爲 GLM 的。


GLM 簡單介紹

OpenGL mathematics(GLM),它的官網

它是一個C++編寫的數學庫,實現接近於 GLSL 規範的軟件圖形庫。

使用起來非常簡單,不用編譯出什麼庫類型的工程來鏈接,它就直接 include 頭文件(.hpp)進來就可以使用了。

GLM 實現了類 和 方法使用實現了類似 GLSL 規範中的接口設計,使用起來最爽的是它向量的 swizzle 的便利性。

當然 GLM 不限於 GLSL 的一些特性。它也可以包含一些擴展的系統,或基於 GLSL 擴展規範,或提供其他擴展的兼容:matrix tarnsformations(矩陣變換)、quaternions(四元數)、data packing(數據打包)、random numbers(隨機數)、noise(噪點函數),等等。

該庫非常適合用於 OpenGL,也保證了可與其他第三方庫或SDK配合使用。如果要製作軟渲染(光線追蹤、光柵化),圖像處理,圖例模擬 和 任意的需要數學庫開發的都是可選的一個庫。

GLM 使用 C++98 來編寫,但也支持 C++11等高級的特性,只要編譯器支持。下列的編譯器都可以支持:

想要了解更多 GLM 相關內容,可以查看:the manual (手冊) 和 API 參考文檔

代碼實例:

#include <glm/vec3.hpp> // glm::vec3
#include <glm/vec4.hpp> // glm::vec4
#include <glm/mat4x4.hpp> // glm::mat4
#include <glm/gtc/matrix_transform.hpp> // glm::translate, glm::rotate, glm::scale, glm::perspective

glm::mat4 camera(float Translate, glm::vec2 const & Rotate)
{
	glm::mat4 Projection = glm::perspective(glm::radians(45.0f), 4.0f / 3.0f, 0.1f, 100.f);
	glm::mat4 View = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Translate));
	View = glm::rotate(View, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f));
	View = glm::rotate(View, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f));
	glm::mat4 Model = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));
	return Projection * View * Model;
}

Git 倉庫

git : GLM

下載後,如果想要看 GLM 的測試用例,可以用 CMake 來生成 VS2019 的工程,CMake 簡單的使用,可以參考我之前生成 GLFW 的VS2019工程的方法
在這裏插入圖片描述

使用

將git中的 git 倉庫中目錄中的 glm 文件夾 copy 到你的 include 目錄就可以了。

然後該幹嘛就幹嘛。例如:上面是官方提供的一段代碼示例。

示例中的那幾個頭文件是 OpenGL 中非常常用的。我的 Camera 使用 GLM 版本的需要用到這幾個。

你也可以查看 the manual (手冊) 和 API 參考文檔。去了解怎麼使用,這裏推薦先查看手冊。

你也可以參考這個 OpenGL 教程中的:變換-GLM 的簡單使用。


References

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章