我有一个代表3D模型(场景图)的对象树。树节点具有不同的类型(作为来自公共基类的派生类实现)。例如,有一个表示多边形的节点,或者一个将坐标变换(旋转,平移)应用到其子节点的节点。这也是一个要求,第三方供应商应该能够实现新的节点类型,并通过插件(我使用Qt作为GUI框架)添加它们。因此,编译时可能存在树中的节点,其类型未知。在C++场景图上实现MVC模式
现在我想实现一个类,作为这个场景图的视图。对于每个树节点类型,视图必须采取适当的操作(绘制多边形,变换等)。我的想法是为每个节点类型实现视图类,并根据节点类型让顶级视图类委派给这些类。 (第三方供应商将能够实现自己的查看代理类)
所以我的问题是:我如何确定一个节点的性能和可扩展的方式?
我的想法而已:
我可以一个类型标识符添加到每个节点类。这可能只是一个整数(字符串不适合性能方面的原因)。问题在于管理第三方供应商的类型标识符。我怎样才能确保相同的标识符不用于不同的节点类型(例如不同的供应商)?
我可以实现绘图代码,或者直接在节点中直接调用相应的绘图委托对象。但是我的节点对象最好不知道他们的视图对象。也不可能给每个节点对象一个专用的视图对象(我们正在谈论成千上万的节点)。
那么,你有什么想法?是否有完全不同的方式来处理这个问题?记住:解决方案不应该要求哈希表查找或其他计算密集型算法,因为我需要实时绘制图形。
由于提前, McNumber
谢谢你的答案!在某种游戏中,这是完全可以接受的。但是我必须开发一个3D-CAD应用程序。该树用于存储关于当前编辑模型的实体的所有信息。此外,同样的树被用于模拟,测试等。为这些任务分配不同的树将是毫无意义的,因为它们大多是相同的。我明确地想要分离模型(或许是比场景图更好的词)和绘图算法。 – McNumber 2010-11-26 09:03:15