OpenGL c++ 中的旋转子对象

Rotating child object in OpenGL c++

本文关键字:对象 旋转 c++ OpenGL      更新时间:2023-10-16

我正在将一个具有多个DoG的机器人添加到我的OpenGL应用程序中(稍后我想为这个机器人实现反向运动学(,我需要移动"连接"在一起的对象。

到目前为止,我将 3 个 STL 对象添加到场景中,看起来像这样

有底座、关节1和关节2。

底座是静止的,joint1 和 joint2 现在根据键盘输入绕 Z 轴旋转,但它们都只是围绕它们的原点旋转,这对于 joint1 来说很好,但对于 joint2,我需要它们连接并相应地平移。

这是旋转后的输出。

对于对象定位和旋转,我使用常规的 MVP 矩阵和 glm。

joint1M = glm::translate(joint1M, glm::vec3(-50.0f, -10.4f, 0.0f));
joint1M = glm::rotate(joint1M, glm::radians(rotation), glm::vec3(0.0f, 1.0f, 0.0f));
joint2M = glm::translate(joint2M, glm::vec3(-50.0f, 2.85f, 0.0f));
joint2M = glm::rotate(joint2M, glm::radians(rotation), glm::vec3(0.0f, 1.0f, 0.0f));

有没有办法在OpenGL中创建父级团结关系之类的东西?还是我应该根据关节 2 的旋转以某种方式改变关节 1 的位置?

感谢评论和更多的谷歌搜索,我设法让它像这样工作:

关节 1 保持不变:

joint1M = glm::translate(joint1M, glm::vec3(-50.0f, -10.4f, 0.0f));
joint1M = glm::rotate(joint1M, glm::radians(rotation), glm::vec3(0.0f, 1.0f, 0.0f));
关节

2 移动到关节 1 的位置,旋转,移动到它应该在的位置

joint2M = glm::translate(joint2M, glm::vec3(-50.0f, -10.4f, 0.0f));
joint2M = glm::rotate(joint2M, glm::radians(rotation), glm::vec3(0.0f, 1.0f, 0.0f));
joint2M = glm::translate(joint2M, glm::vec3(0.0f, 13.25f, 0.0f));