glm::dot() не возвращает значение типа float/double?
Я пытаюсь использовать glm::dot
рассчитать скалярное произведение двух glm::dvec3
Тем не менее, мой компилятор возвращает эту ошибку, когда я пытаюсь сделать это
#include <glm/glm.hpp>
int main(int argc, char* argv[]){
glm::dvec3 a = glm::dvec3(1f, 2f, 3f);
glm::dvec3 b = glm::dvec3(4f, 5f, 6f);
float weight = glm::dot(a, b)
}
ОШИБКА: Type 'double' and 'glm::dvec3' are not compatible
в последней строке, когда я присваиваю вес результату glm:: dot
Я использую (clion, cygwin, gcc) и glm 0.9.8 и C++ 11
РЕДАКТИРОВАТЬ: добавить более подробное местоположение ошибки и контекст кода
1 ответ
Может быть, есть лучшее решение, но это работает для меня
glm::vec3 a;
glm::vec3 b;
glm::dot<3, float, glm::qualifier::highp>(a, b);
Поскольку GLM имеет два метода точка
template<typename T>
GLM_FUNC_QUALIFIER T dot(T x, T y)
{
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'dot' accepts only floating-point inputs");
return x * y;
}
template<length_t L, typename T, qualifier Q>
GLM_FUNC_QUALIFIER T dot(vec<L, T, Q> const& x, vec<L, T, Q> const& y)
{
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'dot' accepts only floating-point inputs");
return detail::compute_dot<vec<L, T, Q>, T, detail::is_aligned<Q>::value>::call(x, y);
}
Компилятор предполагает, что T является vec3, и по этой причине использует первый метод
Посмотрите на этот пост:
В этом конкретном случае, когда универсальный тип T используется в качестве параметра для GetMax, компилятор может автоматически определить, какой тип данных должен быть создан, без необходимости явно указывать его в угловых скобках (как мы это делали до указания и). Таким образом, мы могли бы написать вместо этого: int i,j; GetMax (i,j);
Надеюсь это поможет