首页 > 解决方案 > 在opengl中旋转3D模型

问题描述

我正在尝试根据 9DoF 参数为我的模型分配场景中的位置。其中,轮换让我很难过。如果我将 x 和 z 旋转保持为零,那么roty似乎工作正常并且模型仅围绕 y 轴旋转。但是,只要我给 x 和 y 旋转任何值,模型就会在进行 y 旋转时围绕其他两个轴移动。

下面是我用来给出rotxrotyrotz值的代码。我觉得矩阵乘法有一些问题。因为0 * x + roty * y + 0 * z = roty only 但任何东西* x + roty * y +任何东西* z = 任何东西

model = glm::translate(model, glm::vec3(transX, transY, transZ));
model = glm::rotate(model, toRadians * rotX, glm::vec3(1, 0, 0));
model = glm::rotate(model, toRadians * rotY, glm::vec3(0, 1, 0));
model = glm::rotate(model, toRadians * rotZ, glm::vec3(0, 0, 1));

标签: c++opengl3drenderingglm-math

解决方案


对于定向对象,首先应用旋转,然后才考虑平移/旋转另一个对象:

 model = glm::rotate(model, toRadians * rotX, glm::vec3(1, 0, 0));
 model = glm::rotate(model, toRadians * rotY, glm::vec3(0, 1, 0));
 model = glm::rotate(model, toRadians * rotZ, glm::vec3(0, 0, 1));
 model = glm::translate(model, glm::vec3(transX, transY, transZ));

推荐阅读