为什么这段代码会编译
[[nodiscard]] glm::mat4 rotationX(double theta)
{
return glm::rotate(glm::mat4(1.0), static_cast<float>(theta), glm::vec3(1.0, 0.0, 0.0));
}而这个不是
[[nodiscard]] glm::mat4 rotationX(double theta)
{
return glm::rotate(glm::mat4(1.0), theta, glm::vec3(1.0, 0.0, 0.0));
}它导致了误差C2672 no matching overloaded function found和误差C2782: Template parameter T is ambigous。θ应该是什么类型的?
也是这个代码
[[nodiscard]] glm::mat4 shearing(double xy, double xz, double yx, double yz, double zx, double zy)
{
auto sh = glm::mat4(1.0);
sh[1][0] = xy;
sh[2][0] = xz;
sh[2][1] = yz;
sh[0][1] = yx;
sh[0][2] = zx;
sh[1][2] = zy;
return sh;
}产生以下警告:
warning C4244: 'argument' : conversion from 'double' to 'T', possible loss of data
我不明白这个错误到底是什么,因为其他的一切似乎都正常。
PS,我包括
#include <glm/fwd.hpp> 在.hpp和
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>在.cpp中。
发布于 2021-09-17 13:02:14
当将glm::rotate与vec3和mat4一起使用时,theta的类型必须是浮动的,因为mat4和vec3的元素类型是float。
mat<4,4,f32,defaultp> mat4;
相应的双精度数据类型是damt4和dvec3。
mat<4,4,f64,defaultp> dmat4;vec<3,f64,defaultp> dvec3;
这些类型的名称与相应的GLSL数据类型(数据类型(GLSL) )相同。在glsl中,矩阵和向量数据类型可以从任何基本数据类型构造。
发布于 2021-09-17 12:58:25
[[nodiscard]] glm::mat4 shearing(double xy, double xz, double yx, double yz, double zx, double zy)
{
auto sh = glm::mat4(1.0);
sh[1][0] = xy;
sh[2][0] = xz;
sh[2][1] = yz;
sh[0][1] = yx;
sh[0][2] = zx;
sh[1][2] = zy;
return sh;
}https://stackoverflow.com/questions/69223831
复制相似问题