c++ - 在opengl中旋转3D模型
问题描述
我正在尝试根据 9DoF 参数为我的模型分配场景中的位置。其中,轮换让我很难过。如果我将 x 和 z 旋转保持为零,那么roty似乎工作正常并且模型仅围绕 y 轴旋转。但是,只要我给 x 和 y 旋转任何值,模型就会在进行 y 旋转时围绕其他两个轴移动。
下面是我用来给出rotx、roty、rotz值的代码。我觉得矩阵乘法有一些问题。因为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));
解决方案
对于定向对象,首先应用旋转,然后才考虑平移/旋转另一个对象:
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));
推荐阅读
- java - 在抽象类中实现 compareTo()
- javascript - 使用按钮重置我的“自上次事故程序”
- reactjs - 如何避免异步操作在未安装的组件上设置状态?
- oracle - Oracle APEX 和在数字字段上搜索 IG
- javascript - 在 HTML 文件中为 JavaScript 文件提供路径时出现问题
- r - 如何转置列表的每个向量为它们分配一个唯一的数字,并将它们绑定在 r 中?
- python - 如何使用正则表达式语法从给定列中的文本中删除“省略号”?
- haskell - scanl1 真的是局部的吗?
- python - 使用 python 仅在特定时间间隔获取 CSV 数据
- php - 如何从底部轴上的 mysql 正确获取时间序列数据