glm::dot返回值异常?赋值glm::dvec3点积时类型不兼容报错
解决glm::dot赋值时double与glm::dvec3类型不兼容的问题
这个报错的核心原因其实非常直白:你把glm::dot返回的double类型标量值,赋值给了一个声明为glm::dvec3的向量变量weight,两种类型完全不兼容,编译器自然会抛出类型不匹配的错误。
先看能复现你问题的代码示例
#include <glm/glm.hpp> int main() { glm::dvec3 vec1(1.0, 2.0, 3.0); glm::dvec3 vec2(4.0, 5.0, 6.0); glm::dvec3 weight; // 错误:这里把weight声明为三维向量类型 weight = glm::dot(vec1, vec2); // 编译器报错:double无法赋值给glm::dvec3 return 0; }
在GLM 0.9.8版本中,glm::dot对于两个glm::dvec3的计算结果是一个双精度标量(double)——毕竟三维向量的点积本身就是一个数值,而非向量。你把这个标量赋值给向量类型的变量,这就是冲突的根源。
最简单的修正方案
只需要把weight的类型从glm::dvec3改成double即可:
#include <glm/glm.hpp> int main() { glm::dvec3 vec1(1.0, 2.0, 3.0); glm::dvec3 vec2(4.0, 5.0, 6.0); double weight; // 修正为双精度标量类型 weight = glm::dot(vec1, vec2); // 类型匹配,编译通过 return 0; }
额外补充:如果需要把标量转为向量
如果你确实需要将点积的标量结果存储到glm::dvec3中(比如让向量的三个分量都等于这个标量),可以直接用GLM的构造函数初始化:
double weight_scalar = glm::dot(vec1, vec2); glm::dvec3 weight_vec(weight_scalar); // 三个分量都会被设为weight_scalar的值
内容的提问来源于stack exchange,提问作者resnet
相关产品推荐
相关产品推荐

