本人才疏学浅,如有什么错误,望不吝指出。
上一篇:LearnGL - 08 - Camera - linmath.h 版,了解OpenGL 的一些几何变换,其中包含了摄像机的封装。
这一篇:因为 上次封装使用的 Camera 使用的线性代数库 是: linmath.h ,使用起来很不方便,所以这边我们先了一下:GLM,后面再实现一篇 GLM 的 Camera,并将之前所有用到 linmath.h 的地方的内容,都改为 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
#include // glm::vec4
#include // glm::mat4
#include // 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 : GLM
下载后,如果想要看 GLM 的测试用例,可以用 CMake 来生成 VS2019 的工程,CMake 简单的使用,可以参考我之前生成 GLFW 的VS2019工程的方法。
将git中的 git 仓库中目录中的 glm 文件夹 copy 到你的 include 目录就可以了。
然后该干嘛就干嘛。例如:上面是官方提供的一段代码示例。
示例中的那几个头文件是 OpenGL 中非常常用的。我的 Camera 使用 GLM 版本的需要用到这几个。
你也可以查看 the manual (手册) 和 API 参考文档。去了解怎么使用,这里推荐先查看手册。
你也可以参考这个 OpenGL 教程中的:变换-GLM 的简单使用。