在OpenGL C ++中旋转子对象

时间:2019-03-26 16:10:09

标签: c++ opengl rotation glm-math robot

我正在向我的OpenGL应用程序添加一个具有多个DoG的机器人(后来我想为此机器人实现逆运动学),并且我需要将“连接”在一起的对象一起移动。

到目前为止,我在场景中添加了3个STL对象,看起来像this

有基础,关节1和关节2。

基座是固定的,joint1和joint2现在基于键盘输入围绕Z轴旋转,但是它们都只是绕其原点旋转,这对于joint1很好,但是对于joint2,我需要将其连接并相应地平移

Here是旋转后的输出。

对于对象定位和旋转,我使用常规的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中创建类似子父母的关系吗?还是我应该基于关节1的旋转以某种方式更改关节2的位置?

1 个答案:

答案 0 :(得分:2)

由于评论和更多的谷歌搜索,我设法使它像这样工作:

joint1保持不变:

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));