二叉空间分割(BSP)树

二叉空间分割(BSP)树

ID:38995445

大小:140.00 KB

页数:9页

时间:2019-06-23

二叉空间分割(BSP)树_第1页
二叉空间分割(BSP)树_第2页
二叉空间分割(BSP)树_第3页
二叉空间分割(BSP)树_第4页
二叉空间分割(BSP)树_第5页
资源描述:

《二叉空间分割(BSP)树》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、BSP树2007年12月17日星期一19:59二叉空间分割(BSP)树  BSP(BinarySpacePartition)表示二叉空间分割。使用这种方法可以使我们在运行时使用一个预先计算好的树来得到多边形从后向前的列表,它的复杂度为。它是由Fuch和Kedem在1980年首先提出的。它的基本思想是基于这样一个事实,任何平面都可以将空间分割成两个半空间。所有位于这个平面的一侧的点定义了一个半空间,位于另一侧的点定义了另一个半空间。此外,如果我们在任何半空间中有一个平面,它会进一步将此半空间分割为

2、更小的两个子空间。我们可以使用多边形列表将这一过程一直进行下去,将子空间分割得越来越小,直到构造成一个二叉树。在这个树中,一个进行分割的多边形被存储在树的节点,所有位于子空间中的多边形都在相应的子树上。当然,这一规则使用于树中每一个节点。  我们来看一下图7.21种的多边形。为了简单起见,我们选择一个这样一个平面投影,在它上面,所有多边形都能映射为直线段。让我们由多边形B开始构造一个BSP树。(见图7.21) 多边形B所在的平面将空间分割为两个部分,使得多边形D和E位于同一个半空间中,多边形C在

3、另一个半空间中。在这个例子中,多边形A穿越了两个半空间,这样,它就不能十分明确的被分配到任何一个半空间中。但是,如果我们将这个多边形从它与分割平面相交的地方分为两个部分一个命名为,另一个命名为,这样,就和D、E在同一个半空间中,和C在同一个半空间中。下图表述了这一过程。图7.22建立BSP树的一个阶段  我们现在已经将问题分成了两个子问题。我们可以在子树中再次使用上述算法。例如,我们在左边子树中选择E作为分割多边形,在右边子树中选择作为分割多边形。这样,我们将建立下面的结构树。(见图7.23)图

4、7.23建立BSP树  必须注意,任何给定的BSP树都不是唯一的。我们可以对同样的多边形找到多个有效的二叉分割。依靠我们选择来进行分割的多边形的顺序,可以得到不同的树。例如,在图7.24中,我们可以看到另一个树,它也建立在前面我们讨论的多边形上。图7.24另一种结构  尽管所有适合这种算法的正确的树都可以用来得到多边形从后向前的顺序,但是总有一些要比其他一些更加有效。我们首先检查树遍历算法,然后检查确认特殊树结构的原因。  我们考虑一个包含了一系列多边形的场景,场景带有一个预先计算好的BSP树和

5、一个位于场景中某个位置的观察者。(见图7.25)图7.25用BSP树来得到从后向前的顺序  我们检查观察者的位置和位于树顶部的多边形之间的关系。很明显,当这个多边形将空间分割为两个部分时,观察者必须位于其中的一个半空间中。当然,位于同一半空间中的多边形要比另一半空间中的多边形离观察者更近。基于这样的事实,如果我们首先将较远处半空间中的多边形放置在最终的列表中,然后放置根多边形,再放置与观察者在同一半空间中的多边形,这样就很容易得到多边形从后向前的顺序了。我们对每一个子树都重复同样的过程,在每一个

6、级别中选择相应的顺序,最终,就会得到正确的多边型的顺序。  这一算法的一个优点就是无论观察者位于场景中的什么位置,无论观察者的朝向如何,它都可以很好的进行工作。例如,在图7.25(a)中产生的列表就与(b)中产生的不同。但是他们对于各自的情况都是正确的。这样,如果我们预先为一个多边形模型计算一个BSP树,那么在运行时,我们只需要根据观察者的位置调用这个树,执行树遍历过程,就可以产生用于隐面消除的画家算法所需的从后向前的多边形顺序。  在这个算法中,在树的每一个节点处所作的判定,都依赖于观察者位于

7、该节点多边形所产生的哪一个半空间中。在第五章中,分析平面方程式时我们已经遇到过要使用这种计算的情况。利用我们所讨论过的事实,我们可以看到,如果将观察者位置的坐标代入给定多边形的平面方程式中,结果数值的符号如果是正号,就表示观察者位于该多边形的法向量所指向的半空间中,负号表示位于另一个半空间中,0值表示他位于这个多边形所在的平面上。最后一种情况,对于遍历整个BSP树的意图来说,意味着半空间在屏幕上的投影不相交,并且我们可以在这一阶段的遍历过程中选择任何子树的顺序。  相同的计算也要在预先计算一个B

8、SP树时使用到。我们需要决定不同的多边形应该被放置在哪个子树中。从可实现性的观点出发,预先计算一个BSP树的过程可以被描述成下面的形式:对多边形集合,我们选择一个多边形。进一步计算该多边形的平面方程式。对剩余的多边形,我们用所说的方程式检查它们的所有顶点。如果所有顶点都是负值,那么多边形就放置在一个子树中;如果都是正值,那么多边形就放置在另一个子树中;如果结果有正有负,那么多边形就被分为两部分,分别放置在两个子树中。一旦我们将所有多边形分配到了正确的半空间中,我们就可以对子树进一步调用同样的方法

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。