麻烦包括/使用GLM库

时间:2013-10-11 21:30:53

标签: c++ glm-math

我在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

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

4 个答案:

答案 0 :(得分:23)

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

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

现在测试示例有效。 (我也注意到我在测试中也犯了一个愚蠢的错误,这会使它无法编译。现在为了将来可能遇到问题的读者已经修复了原来的问题。 )

答案 1 :(得分:8)

也许我有点迟了但不是

//Generate Purchase Order
function generatePO() {
  var ss = SpreadsheetApp.getActive();
  var ogSheet = ss.getSheetByName('Ordering guide');
  var poSheet = ss.getSheetByName('Purchase Order');
  var lookupData = ogSheet.getRange(5, 1, ogSheet.getLastRow()-4, 9).getValues();
  var targetData = [];
  for(var i=0; i<lookupData.length; i++){
    if(lookupData[i][7] && lookupData[i][7] > 0){
      targetData.push(lookupData[i]);
    }
  }
  poSheet.getRange(5, 1, 50-4, 9).clearContent();
  poSheet.getRange(5, 1, targetData.length, 9).setValues(targetData);
  poSheet.activate();
}

//Reset Quantities
function resetQuantity(){
  var ss = SpreadsheetApp.getActive();
  var ogSheet = ss.getSheetByName('Ordering guide');
  var qtyRange = ogSheet.getRange(5, 8, ogSheet.getLastRow()-4, 1).clearContent();
}

可以使用

#include "glm/glm.hpp"

答案 2 :(得分: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)

答案 3 :(得分:-1)

在终端上写:

sudo apt install libglm-dev

这对我有用。