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

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