Я пытаюсь разработать приложение с Qt 5.5 и OpenGL. Основная работа приложения будет заключаться в загрузке простых объектов, изменении их положения в сцене и сохранении их вместе с другими атрибутами (материал, имя, отношения родителей/потомков и т. д.).
Единственное, над чем я бьюсь уже неделю, это то, что я действительно не знаю, как мне решить проблему синхронизации данных. Допустим, у меня есть какой-то класс SceneGraph, который заботится обо всех объектах SceneObject. Эти SceneGraphs должны отображаться в виджете SceneView, который можно использовать для изменения его объектов с помощью преобразований. Теперь, как мне сказать каждому SceneView, что объект изменил свою позицию?
На мгновение я подумал об архитектуре Model/View, но я не совсем уверен, как должна выглядеть эта реализация.
Как лучше всего обрабатывать такие объекты в разных Windows/виджетах, но при этом иметь один фрагмент данных?
Объект сцены:
- Holds the mesh-information (verticies, uvs, etc..)
- Имеет имя (QString)
- Имеет материал
- Имеет преобразование, хранящее информацию о положении, вращении и масштабировании (Важно: эти типы данных должны быть синхронизированы во всех представлениях)
График сцены:
- Contains different SceneObjects and is passed to SceneViews
Вид сцены:
- The QWidget responsible for drawing the Scene correctly in any QWindow.
- Имеет собственную камеру для передвижения.
- Обрабатывает пользовательский ввод и позволяет преобразовывать объекты сцены.