GLM使用问题:rotate重载匹配失败与double类型转换警告如何解决
问题1:glm::rotate编译重载匹配错误解答
报错原因
glm::rotate是模板函数,要求输入矩阵的元素类型、旋转角度类型、旋转轴向量的元素类型必须完全一致,才能正确推导模板参数:
- 你使用的
glm::mat4、glm::vec3默认是单精度浮点(float)类型 - 第二段代码中传入的
theta是double类型,三类参数类型不匹配,模板推导出现歧义,因此触发C2672、C2782报错
解决方案
你可以任选一种方式解决:
- 保留现有
float精度的矩阵和向量,像第一段代码一样将theta显式转为float类型 - 直接将函数的
theta参数类型改为float - 若需要双精度计算,将矩阵和向量替换为
glm::dmat4、glm::dvec3,对应double类型的theta参数
问题2:剪切矩阵编译精度丢失警告解答
警告触发原因
默认配置下glm::mat4的每个元素存储类型为float,你定义的shearing函数所有参数都是double类型。给矩阵元素赋值时,double转float会存在精度截断的可能,因此编译器抛出C4244警告。
解决方案
你可以任选一种方式解决:
- 将
shearing函数的所有参数类型改为float - 赋值时显式做类型转换,比如
sh[1][0] = static_cast<float>(xy) - 若需要保留双精度,将
sh变量的类型改为glm::dmat4
内容的提问来源于stack exchange,提问作者a a
相关产品推荐
相关产品推荐

