我正在尝试使用 Qt 5.5 和 OpenGL 开发应用程序。该应用程序的基本工作是加载简单的对象,修改它们在场景中的位置,并将它们与其他属性(材质、名称、父/子关系等)一起保存。
一个星期以来我唯一苦恼的是,我真的不知道我应该如何处理同步数据的问题。假设我有某种处理所有场景对象的 SceneGraph 类。这些 SceneGraph 应该在 SceneView-Widget 中呈现,该小部件可用于通过转换修改其对象。现在我如何告诉每个 SceneView 对象改变了它的位置?
我想了一会儿模型/视图架构,但我不确定这个实现应该是什么样子。
在不同的 Windows/Widget 中处理这样的对象但仍然只有一个数据的最佳方法是什么?
场景对象:
- 保存网格信息(verticies、uvs 等)
- 有一个名字(QString)
- 有材质
- 具有存储位置、旋转和缩放信息的变换(重要:这些数据类型应在所有视图中同步)
场景图:
- 包含不同的SceneObjects并传递给SceneViews
场景视图:
- 负责在任何 QWindow 中正确绘制场景的 QWidget。
- 有自己的相机可以四处走动。
- 处理用户输入并允许转换场景对象。