为什么glm不平移顶点
Why glm does not translate vertex
我正在尝试使用 glm 通过矩阵变换来平移顶点。
但看起来,我做错了什么。
我试图改变 vm 和 mv 的一侧,但结果相同。 Res 与 to
相乘后的值相同;
void transform(V3 &to, PTransformation t)
{
float v1 = to.x();
float v2 = to.y();
float v3 = to.z();
glm::vec4 v = glm::vec4(v1, v2, v3, 1.0f);
glm::vec3 valuesToTranslate(t.translateX, t.translateY, t.translateZ);
glm::mat4 m = glm::translate(valuesToTranslate);
glm::vec4 res = v * m;
to.e[0] = res.x;
to.e[1] = res.y;
to.e[2] = res.z;
}
我已经用 GLM 0.9.9 和 GCC 7.4.0 测试了这个,它在切换 v
和 m
的乘法顺序后工作。
glm::vec4 v = glm::vec4(0.0, 4.0, 0.0, 1.0f);
glm::vec3 valuesToTranslate(8.0, 0.0, 0.0);
glm::mat4 m = glm::translate(valuesToTranslate);
glm::vec4 res = m * v;
// expected output: vec(8.0, 4.0, 0.0, 1.0)
std::cout << glm::to_string(res) << std::endl;
如果您在自己的代码中仍未获得预期结果,我建议您检查输入值,如果失败,请检查您的 GLM 版本是否存在已知问题。
也许您输入的数据无效?
你能显示输入数据吗
我正在尝试使用 glm 通过矩阵变换来平移顶点。
但看起来,我做错了什么。
我试图改变 vm 和 mv 的一侧,但结果相同。 Res 与 to
相乘后的值相同;
void transform(V3 &to, PTransformation t)
{
float v1 = to.x();
float v2 = to.y();
float v3 = to.z();
glm::vec4 v = glm::vec4(v1, v2, v3, 1.0f);
glm::vec3 valuesToTranslate(t.translateX, t.translateY, t.translateZ);
glm::mat4 m = glm::translate(valuesToTranslate);
glm::vec4 res = v * m;
to.e[0] = res.x;
to.e[1] = res.y;
to.e[2] = res.z;
}
我已经用 GLM 0.9.9 和 GCC 7.4.0 测试了这个,它在切换 v
和 m
的乘法顺序后工作。
glm::vec4 v = glm::vec4(0.0, 4.0, 0.0, 1.0f);
glm::vec3 valuesToTranslate(8.0, 0.0, 0.0);
glm::mat4 m = glm::translate(valuesToTranslate);
glm::vec4 res = m * v;
// expected output: vec(8.0, 4.0, 0.0, 1.0)
std::cout << glm::to_string(res) << std::endl;
如果您在自己的代码中仍未获得预期结果,我建议您检查输入值,如果失败,请检查您的 GLM 版本是否存在已知问题。
也许您输入的数据无效? 你能显示输入数据吗