Geometry BSP中的多边形

Geometry BSP中的多边形,geometry,space-partitioning,bsp-tree,Geometry,Space Partitioning,Bsp Tree,我有一个由二元空间分区树给出的3d卷。通常,这些都是由多边形模型和已存储在树节点中的分割多边形组成的 但我的不是,所以我没有多边形。每个节点只有它的剖切面(例如,由法线和原点距离给出)。因此,树仍然表示由所有切割定义的实体三维体积。然而,为了可视化,我需要这个体积的多边形网格。如何有效地重建 粗略的方法是将叶子的无限半空间转换成足够大的多面体(如立方体),并将它们中的每一个向上推到树上,按它经过的每个节点的平面切割。这似乎非常昂贵,因为树可能是不平衡的(例如,如果愚蠢地由凸多面体制成)。有什么经

我有一个由二元空间分区树给出的3d卷。通常,这些都是由多边形模型和已存储在树节点中的分割多边形组成的

但我的不是,所以我没有多边形。每个节点只有它的剖切面(例如,由法线和原点距离给出)。因此,树仍然表示由所有切割定义的实体三维体积。然而,为了可视化,我需要这个体积的多边形网格。如何有效地重建


粗略的方法是将叶子的无限半空间转换成足够大的多面体(如立方体),并将它们中的每一个向上推到树上,按它经过的每个节点的平面切割。这似乎非常昂贵,因为树可能是不平衡的(例如,如果愚蠢地由凸多面体制成)。有什么经典的解决方案吗

要恢复多边形曲面,需要与平面相交。其中多边形的每个顶点由三个平面的交点生成,每个边由两个平面的交点生成。但要使这一效率和数值稳定并非易事。所以我建议使用
qhalf
,它是。可以找到
qhalf
的输入和输出文档。当然,你可以使用
qhull
(以及
qhalf
中的功能)作为一个例子。

我不知道答案,但任何从事过这项工作的人都可能知道,至少在2D案例中是这样。也许这些算法可以扩展到3D?我不认为末日制造者需要这个。厄运地图的“区域”已在编辑器中制作为多边形,其BSP结构。所以多边形以前就已经存在了。在OpenGL端口(例如zDoom)中,子扇区需要是闭合的多边形,因此虽然扇区通常是闭合的,但它们需要拆分和重建。好吧,我有点陷入厄运,但我仍然认为多边形不是从BSP构建的,而是从输入顶点获取的,可能通过计算顶点添加,将其拆分为凸面部分。不过,该算法通过分割现有边(如果我没有弄错的话,在DOOM中称为
linedef
)并添加
subsector
s来生成新的顶点。因此,仅拆分和连接现有直线,而不仅通过拆分平面计算新直线。