Синхронизация данных Qt OpenGL/реализация модели/представления

Я пытаюсь разработать приложение с 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.
    • Имеет собственную камеру для передвижения.
    • Обрабатывает пользовательский ввод и позволяет преобразовывать объекты сцены.

person Maperz    schedule 14.11.2015    source источник


Ответы (1)


Вы можете использовать сигнал и слот для наблюдения за обновлениями положения объектов SceneObject и обработки их в SceneView.

person chung    schedule 16.11.2016