包含/使用 GLM 库的问题

Posted

技术标签:

【中文标题】包含/使用 GLM 库的问题【英文标题】:Trouble Including / Using GLM library 【发布时间】:2013-10-11 21:30:53 【问题描述】:

在我的 c++ 项目中正确包含/使用 glm 数学库 (http://glm.g-truc.net/) 时遇到问题。由于 glm 是一个“仅标题”库,我想我可以将它包含在这一行中:

#include "glm/glm.hpp"

起初这似乎可行,因为我可以创建和使用矩阵和向量。但是,当我尝试使用 glm::translate(...) 函数时,我得到了这个错误:

error: ‘translate’ is not a member of ‘glm’

在 GLM 网站上,他们建议将库包含在三角括号中,如下所示:

#include <glm/glm.hpp>

...但是考虑到它位于项目目录结构中,认为我可以以其他方式包含它是不是正确的?

我已经设置了下面的测试来说明我遇到的问题。 glm 文件夹位于 testglm.cpp 文件旁边。

#include <iostream>

#include "glm/glm.hpp"

using namespace std;

int main(void) 

    // works:
    glm::mat4 testMatrix1 = glm::mat4(5.0f) * glm::mat4(2.0f);

    cout << testMatrix1[0][0] << endl; // output: 10

    // doesn't work - (error: ‘translate’ is not a member of ‘glm’):
    glm::mat4 testMatrix2 = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f));


我正在使用来自终端的这个构建命令在 osx 上构建这个测试:

g++ -o bin/glm_test src/testglm.cpp

我不确定我的问题是否与我如何包含库、我如何使用它或我如何构建项目有关。谷歌没有给我任何关于该错误消息的点击,所以我想知道我是否在做一些根本错误的事情。建议将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

yngum 的建议让我更仔细地查看文档,我意识到glm::translate 实际上是扩展 glm 核心的模块的一部分。我需要同时包含 glm 核心和 matrix_transform 扩展:

#include "glm/glm.hpp"
#include "glm/gtc/matrix_transform.hpp"

现在测试示例可以工作了。 (我还注意到我在测试中也犯了一个愚蠢的错误,这会阻止它编译。为了将来的读者可能会因为同样的原因遇到我遇到的问题,现在已经在原始问题中修复了这个问题。 )

【讨论】:

【参考方案2】:

也许我有点晚了,但不是

#include "glm/glm.hpp"

可以使用

#include "glm/ext.hpp"

【讨论】:

【参考方案3】:

确保您有正确的参数或使用 IDE 来简化您的生活。 这是我能找到的glm::translate 签名

detail::tmat4x4<T> translate (detail::tmat4x4<T> const &m, detail::tvec3<T> const &v);
detail::tmat4x4<T> translate (T x, T y, T z)
detail::tmat4x4<T> translate (detail::tmat4x4<T> const &m, T x, T y, T z)
detail::tmat4x4<T> translate (detail::tvec3<T> const &v)

【讨论】:

感谢您花时间回答。你是对的,我在调用translate() 时有一个额外的参数——这是我尝试rotate() 函数时的一个错字。然而,这并不是问题的真正原因,因为 translate 实际上是在我没有包含的扩展中找到的。我决定改正错字并回答我自己的问题,因为我认为这对未来的读者在谷歌上搜索该错误具有更大的实用价值。 +1 让我更仔细地查看文档。谢谢。 顺便说一句,我当然会在严肃的项目中使用 ide,但目前我正在强迫自己学习编写 Makefile。我认为这是一项有价值的练习,最终会在避免痛苦和痛苦方面得到回报。【参考方案4】:

在终端中写入:

sudo apt install libglm-dev

这对我有用。

【讨论】:

这似乎无法回答问题。 OP 似乎已经成功安装了 glm 并且能够包含该包中包含的相关头文件。

以上是关于包含/使用 GLM 库的问题的主要内容,如果未能解决你的问题,请参考以下文章

求教OpenGL中GLM库的使用方法有哪些?

带有 cmake 和 glew glfw3 和 glm 库的 Opengl

OpenGL的GLM库没有幅度函数吗?

我的渲染技术进阶之旅GLM使用手册 GLM 0.9.9 Manual

我的渲染技术进阶之旅GLM使用手册 GLM 0.9.9 Manual

GLM opengl 裁剪问题 - Game Engine c++