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等高級的特性,只要編譯器支持。下列的編譯器都可以支持:
- Apple Clang 6.0 或更高版本的
- GCC 4.7 或更高版本
- Intel C++ Composer XE 2013 或更高版本
- LLVM 3.4 或更高版本
- Visual C++ 2013 或更高版本
- CUDA 9.0 或更高版本 (含實驗版)
- 任意支持 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 的簡單使用。