![](/img/trans.png)
[英]Why double reference value doesn't change when assigned to float variable in C++
[英]glm::dot() doesn't return float/double value?
我正在尝试使用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
编辑:添加更多详细的错误位置和代码上下文
也许有更好的解决方案,但这对我有用
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的参数的特定情况下,编译器可以自动找出必须实例化的数据类型,而不必在尖括号中明确指定它(就像我们在指定and之前所做的那样)。 所以我们可以这样写:int i,j; GetMax(i,j);
希望这可以帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.