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

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

У меня возникают проблемы с включением/использованием математической библиотеки 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

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

4b9b3361

Ответ 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)