glm :: dot()不返回float / double值?

时间:2018-03-08 17:02:09

标签: c++ glm-math

我正在尝试使用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)
}
当我为glm :: dot

的结果赋予权重时,

错误:Type 'double' and 'glm::dvec3' are not compatible在最后一行

我正在使用(clion,cygwin,gcc)和glm 0.9.8和c ++ 11

编辑:添加更详细的错误位置和代码上下文

1 个答案:

答案 0 :(得分:0)

也许有更好的解决方案,但这对我有用

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,因此使用第一种方法

看一下这篇文章:

Templates C++

  

在通用类型T用作参数的特定情况下   对于GetMax,编译器可以自动找出哪种数据类型   实例化而不必在角度内明确指定它   括号(就像我们在指定之前所做的那样)。所以我们   本来可以写:int i,j; GetMax(i,j);

希望这有帮助