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