Skip to main content

Сцены

Параметры размещения хранятся внутри класса робота 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 средствами QT
  • QTGLWidget шаблон виджета QT, использующего OpenGL. Почти все нужные методы уже прописаны. Необходимо написать класс-потомок, у которого должны быть определены методы инициализации init(), рисования paint() и поворота объекта вдоль базовых осей: setXRotation(), setYRotation(), setZRotation(). Углы поворота предполагаются целыми для удобства связывания со слайдерами

Этот редактор также позволяет удалять и добавлять новых роботов на сцену