为什么场景图叫图(Graph)而不是叫树(Tree)?

发布时间 2023-03-29 11:21:44作者: 2086nmj

就如它的名字所说的一样,场景图是一个用于组织图形图像数据结构在计算机中显示的应用程序。一个通常的想法是场景往往被分为很多的部分,而出于某种通常的目的,这些部分最终都会被组合到一场,所以,场景图就是一个代表每个结点都可被分割与重组的图。再定义的严格一些,场景图就是一个非循环的图,所以它同时也体现出结点与结点之间的等级关系。

假如你按照上面的图例的渲染一个场景,然而卡车却停在了你不想让它出现的位置。从某种常理上讲,你一定会把它从某处移到合适的位置,幸运的是场景图的结点并不代表几何关系。在这种情况下,你可以申请一个结点,该结点用来代表运动,在场景图中体现为如图 1.2 所示:图略。

或许你一直在疑惑为什么看起来明明是树而场景图要称做一种图呢?问得好,确实例子中体现的是这种树的关系,然而事情总非像例子中所述的那样。现在让我们往图中添加两个盒子,一个在卡车上,另一个在马路上。同样,为了能够使这两个盒子显示在正确的位置,都需要在它们前面加上移动的几何结点。显而易见,在卡车上的盒子可以与卡车同时使用一个移动结点,因此当我们移动卡车时,盒子也会跟着移动。而事实上,因为两个盒子非常相似,故不需要为它们每个盒子都创建一个结点,可以使用一个结点而产生两次引用来达到这个目的,如图 1.3 所示。在渲染其间,盒子将会被访问两次,但是分享的是同一片内存区域,因此盒子在内存中只被加载了一次。

当然场景图的功能不只是单单处理这些简单的问题,然而对于讲清楚场景图的基本概念即:场景图是什么?已经足够了。
故我们现在可以把更多的时间与精力花在第二个基本且重要的问题上。

参考:《OpenSceneGraph基本渲染理论》,Leandro Motta Barros.2005.8.17.