Проблемы с включением / использованием библиотеки GLM

у меня возникли проблемы с правильным включением / использованием библиотеки glm math (http://glm.g-truc.net/) в моем проекте c++. Поскольку glm-это библиотека "только для заголовков", я подумал, что могу просто включить ее в эту строку:

#include "glm/glm.hpp"

сначала это, казалось, работало, так как я мог создавать и использовать матрицы и векторы. Однако, когда я попытался использовать я получил эту ошибку:

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

на веб-сайте GLM они рекомендуют включить библиотеку с треугольными скобками, например:

#include <glm/glm.hpp>

...но разве не правильно думать, что я могу включить его другим способом, учитывая, что он находится внутри структуры каталогов проекта?

Я настроил тест ниже, чтобы проиллюстрировать проблему, которую я имею. The glm папка находится рядом с .

#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

Я не уверен, что моя проблема касается как я включаю библиотеку, как я ее использую или как я строю проект. Google не дает мне никаких хитов для этого сообщения об ошибке, поэтому мне интересно, делаю ли я что-то принципиально неправильно. Совет был бы очень признателен. Спасибо.

3 ответов


предложение Ингума привело меня к более пристальному изучению документации, и я понял, что glm::translate фактически является частью модуля, который расширяет ядро glm. Мне нужно было включить как ядро glm, так и расширение matrix_transform:

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

теперь тестовый пример работает. (Я также заметил, что я также сделал глупую ошибку в тесте, которая помешала бы ему компилироваться. Это было исправлено в исходном вопросе сейчас ради будущих читателей, которые могут проблема у меня по той же причине.)


может быть, я немного опоздал, но вместо

#include "glm/glm.hpp"

можно использовать

#include "glm/ext.hpp"

убедитесь, что у вас есть правильные аргументы или используйте 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)