为啥glm不翻译顶点

Posted

技术标签:

【中文标题】为啥glm不翻译顶点【英文标题】:Why glm does not translate vertex为什么glm不翻译顶点 【发布时间】:2019-06-23 17:54:10 【问题描述】:

我正在尝试使用 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;


【问题讨论】:

为什么不把t的三个坐标加到to的坐标上? 通常用OpenGL,乘法顺序是m * v,而不是v * m @Rabbid76 我还想添加比例乘法和旋转乘法。这只是一个例子 【参考方案1】:

也许您的输入数据无效? 你能显示输入数据吗

【讨论】:

【参考方案2】:

我已经用 GLM 0.9.9 和 GCC 7.4.0 对此进行了测试,它在切换 vm 的乘法顺序后工作。

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不翻译顶点的主要内容,如果未能解决你的问题,请参考以下文章

理解 GLM-openGL 中的相机翻译

为 glm 翻译添加统一向量在 OpenGL 中不起作用

为啥灯光出现在对面?

GLSL:使用片段着色器进行对象翻译

为啥 Django 翻译不使用 javascript 中的基础语言?

[翻译]利用顶点位移的VR畸变校正