Сцены
Параметры размещения хранятся внутри класса робота BaseRobot
:
/**
* вектор перехода из СК мира в СК робота:
* position: x,y,z; rotation: r,p,y; scale: x,y,z
*/
std::vector<double> _worldTransformVector;
Вектор из рассмотренных девяти значенией будем называть вектором трансформации.
Для планирования в режиме разделённых роботов требуется создать виртуальные сцены, в которых присутствуют только статические объекты и рассматриваемый робот. Для этого в класс сцены добавлено следующее поле:
/**
* список виртуальных сцен для каждого робота в отдельности со всеми статическими объектами
* (у сцены, созданной от ссылки на робота, остаётся пустым)
*/
std::vector<std::shared_ptr<Scene>> _singleRobotScenes;
Каждый статический объект сцены также задаётся с помощью робота, просто у такого робота нет подвижных звеньев. Для упрощения работы добавлен вектор флагов, является ли соответствующий объект полноценным роботом:
/**
* список флагов, имеет ли тот или иной объект звенья
*/
std::vector<bool> _areObjectsJointed;
Отдельно хранятся индексы статических и нестатических роботов:
/**
* список индексов всех объектов, не имеющих звенья
*/
std::vector<int> _notJointedObjectIndexes;
/**
* список индексов всех объектов, имеющих звенья
*/
std::vector<int> _jointedObjectIndexes;
Редактор сцены
Для работы со сценой написано графическое
приложение bmpf_scene_editor
, пакет project.scene_editor
.
С его помощью можно изменять сцену, сохранять и загружать из файла.
Для работы с QT написано два базовых класса в пакете peoject.core.gl_scene
:
QTGLDrawer
базовый класс для рисования объекта OpenGL средствами QTQTGLWidget
шаблон виджетаQT
, использующегоOpenGL
. Почти все нужные методы уже прописаны. Необходимо написать класс-потомок, у которого должны быть определены методы инициализацииinit()
, рисованияpaint()
и поворота объекта вдоль базовых осей:setXRotation()
,setYRotation()
,setZRotation()
. Углы поворота предполагаются целыми для удобства связывания со слайдерами
Этот редактор также позволяет удалять и добавлять новых роботов на сцену