游戏引擎从零开始(11)-集成数学库GLM

集成数据库GLM

图形或者游戏开发中,必不可少需要用到矩阵、向量的运算。

GLM是最常用的数学库,对OpenGL支持非常好。

这节简述GLM集成过程.

clone GLM库

glm地址: github.com/g-truc/glm

以submodule形式集成到项目中

bash 复制代码
git submodule add https://github.com/g-truc/glm Sandbox/Hazel/vendor/glm

如果你的git不能正常访问github,也可以手动下载下来,copy到vendor目录下

CMake更新

GLM只有头文件,所以只需要添加include目录

Sandbox/Hazel/CMakeLists.txt

bash 复制代码
target_include_directories(${PROJECT_NAME} PUBLIC
        vendor/spdlog/include
        vendor/GLFW/include
        vendor/imgui
        vendor/imgui/backends
        vendor/glm
        ...

测试GLM

参考GLM readme.md说明文档

在SandBoxApp中写一段测试GLM的代码,这段测试代码是生成一个相机矩阵,如果不理解先不用管这是干啥的.

Sandbox/src/SandBoxApp.cpp

c++ 复制代码
#include <glm/vec3.hpp> // glm::vec3
#include <glm/vec4.hpp> // glm::vec4
#include <glm/mat4x4.hpp> // glm::mat4
#include <glm/ext/matrix_transform.hpp> // glm::translate, glm::rotate, glm::scale
#include <glm/ext/matrix_clip_space.hpp> // glm::perspective
#include <glm/ext/scalar_constants.hpp> // glm::pi

glm::mat4 camera(float Translate, glm::vec2 const& Rotate)
{
    glm::mat4 Projection = glm::perspective(glm::pi<float>() * 0.25f, 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;
}


class ExampleLayer : public Hazel::Layer {
public:
    ExampleLayer() : Layer("Example") {
        auto cam = camera(1.0, glm::vec2());
        HZ_INFO("GLM test ------ {0}", cam[0][0]);
    }

能正常运行,看到日志即可

相关推荐
天若有情67314 小时前
循环条件隐藏陷阱:我发现了「同循环双条件竞态问题」
c++·学习·算法·编程范式·while循环··竞态
是梦终空11615 小时前
C++中的职责链模式变体
开发语言·c++·算法
mjhcsp15 小时前
C++遗传算法(Genetic Algorithm,GA):进化式全局优化的核心解析
开发语言·c++
仰泳的熊猫15 小时前
题目2270:蓝桥杯2016年第七届真题-四平方和
c++·算法·蓝桥杯
Aaswk16 小时前
蓝桥杯2025年第十六届省赛真题(更新中)
c语言·数据结构·c++·算法·职场和发展·蓝桥杯
王老师青少年编程16 小时前
信奥赛C++提高组csp-s之数论基础专题课:欧拉函数和欧拉定理2(编程案例实践)
c++·数论·欧拉函数·信奥赛·欧拉定理·csp-s·提高组
总斯霖17 小时前
P15445永远在一起!题解(月赛T2)
数据结构·c++·算法·深度优先
Yupureki17 小时前
《C++实战项目-高并发内存池》4.CentralCache构造
c语言·开发语言·c++·单例模式·github
样例过了就是过了17 小时前
LeetCode热题100 全排列
数据结构·c++·算法·leetcode·dfs
2401_8980751217 小时前
分布式系统监控工具
开发语言·c++·算法