Вращающийся дочерний объект в OpenGL c ++ - PullRequest
3 голосов
/ 26 марта 2019

Я добавляю робота с несколькими DoG в свое приложение OpenGL (позже я хочу реализовать для этого робота обратную кинематику), и мне нужно перемещать объекты, которые «связаны» вместе.

Пока что ядобавлено 3 объекта STL в сцену, и это выглядит как this

Есть основание, Joint1 и Joint2.

База неподвижна, Joint1 и Joint2 теперь вращаются вокруг Zось основана на вводе с клавиатуры, но они оба просто вращаются вокруг своей исходной точки, что хорошо для соединения 1, но для соединения 2 мне нужно, чтобы они были подключены и соответственно переведены.

Здесь - этовывод после поворота.

Для позиционирования и поворота объекта я использую обычную матрицу 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));

Есть ли способ создать что-то вроде отношений Unity дочерний и родительскийв OpenGL?Или я должен каким-то образом изменить положение сустава 2 на основе вращения сустава 1?

1 Ответ

2 голосов
/ 26 марта 2019

Благодаря комментариям и большему количеству поисков в Google мне удалось заставить эту работу работать так:

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

joint2 перемещается в положение joint1, вращается, перемещаетсягде он должен быть

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