我在c ++项目中正确地包含/使用glm数学库(http://glm.g-truc.net/)时遇到了麻烦.由于glm是一个"仅标题"库,我想我可以用这一行包含它:
#include "glm/glm.hpp"
Run Code Online (Sandbox Code Playgroud)
起初这似乎是有效的,因为我可以创建和使用矩阵和向量.但是,当我尝试使用该glm::translate(...)函数时,我收到此错误:
error: ‘translate’ is not a member of ‘glm’
Run Code Online (Sandbox Code Playgroud)
在GLM网站上,他们建议包含带三角括号的库,如下所示:
#include <glm/glm.hpp>
Run Code Online (Sandbox Code Playgroud)
...但是考虑到它在项目目录结构中,认为我可以以其他方式包含它是不正确的?
我已经设置了下面的测试来说明我遇到的问题.该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));
}
Run Code Online (Sandbox Code Playgroud)
我正在使用来自终端的这个构建命令在osx上构建此测试:
g++ -o bin/glm_test src/testglm.cpp
Run Code Online (Sandbox Code Playgroud)
我不确定我的问题是否与我如何包括库,我如何使用它,或者我是如何构建项目有关.谷歌没有给我任何关于该错误消息的点击,所以我想知道我是否做了一些根本错误的事情.建议将不胜感激.谢谢.
nul*_*ull 24
yngum的建议让我更仔细地看一下文档,我意识到这glm::translate实际上是扩展glm核心的模块的一部分.我需要包含glm核心和matrix_transform扩展:
#include "glm/glm.hpp"
#include "glm/gtc/matrix_transform.hpp"
Run Code Online (Sandbox Code Playgroud)
现在测试示例有效.(我也注意到我在测试中也犯了一个愚蠢的错误,这会使它无法编译.现在为了将来可能遇到问题的读者已经修复了原来的问题. )
小智 9
也许我有点晚了,而不是
#include "glm/glm.hpp"
Run Code Online (Sandbox Code Playgroud)
一个人可以用
#include "glm/ext.hpp"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14606 次 |
| 最近记录: |