【发布时间】:2016-06-22 05:47:21
【问题描述】:
我正在尝试学习如何在 OpenGL 中对 3d 点进行一些转换。使用this cheat sheet 我相信我有正确的矩阵来乘以我想要旋转的向量。但是,当我乘以并打印新坐标时,我认为它是不正确的。 (旋转 1,0,0 90deg cc 应该会导致 0,1,0 正确?)为什么这不起作用?
我的代码:
glm::vec4 vec(1.0f, 0.0f, 0.0f, 1.0f);
glm::mat4 trans = {
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, cos(glm::radians(90.0f)), -sin(glm::radians(90.0f)), 0.0f,
0.0f, sin(glm::radians(90.0f)), cos(glm::radians(90.0f)), 0,
0.0f, 0.0f, 0.0f, 1.0f
};
vec = trans * vec; //I should get 0.0, 1.0, 0.0 right?
std::cout << vec.x << ", " << vec.y << ", " << vec.z << std::endl;
上面打印1.0, 0.0, 0.0表示完全没有变化?
我还尝试使用 GLM 中的 rotate 函数来生成我的矩阵,而不是手动指定,但我仍然没有得到我认为应该正确的结果(我得到了不同的错误答案)。
glm::mat4 trans = glm::rotate(trans, 90.0f, glm::vec3(0.0, 0.0, 1.0)); //EDIT: my bad, should've been z axis not x, still not working
以上打印:-2.14..e+08, -2.14..e+08, -2.14..e+08
(PS:我上一学年刚学过几何学,如果数学不正确,我深表歉意。我对矩阵和矩阵乘法有基本的了解,我今天学习 OpenGL 转换,但除此之外,我是在这方面有点菜鸟)
【问题讨论】:
-
如果输入为 (1,0,0,1),输出应为 (0,1,0,1),则旋转应围绕 Z 轴。
-
@HannesHauptmann 好的,我尝试进行更改,但仍然没有返回正确答案
glm::mat4 trans = glm::rotate(trans, 90.0f, glm::vec3(0.0, 0.0, 1.0)); -
在左侧您可以看到 OpenGL 如何处理它。我是 100% 这是围绕 Z 轴的旋转 :)
-
@HannesHauptmann 你是对的,我敢肯定。我可能只是搞混了。但是我试了Z轴还是不行?
-
我目前正在检查 glm 规范,我之前从未使用过 GLM ^^
标签: c++ opengl matrix glm-math