3d 为八叉树细分找到立方体和CSG对象之间的交点

3d 为八叉树细分找到立方体和CSG对象之间的交点,3d,intersection,octree,csg,3d,Intersection,Octree,Csg,我正在尝试构建一个八叉树,它表示最初由CSG(Constructional Solid Geometry)树描述的体积 我最初的计划是从一个包含整个对象的大立方体开始,然后测试八个子立方体中的每一个子立方体,哪些是完全外部的,哪些是完全内部的,哪些是内部和外部的。这些“中间”立方体将被递归细分 我的问题可能很愚蠢,但我想不出一种方法来求立方体和曲面的交点 CSG对象,以便能够如上所述对多维数据集进行分类 我的CSG结构是由立方体、球体和圆柱体(将来可能还有圆环)等基本体构建而成的,带有并集、交集

我正在尝试构建一个八叉树,它表示最初由CSG(Constructional Solid Geometry)树描述的体积

我最初的计划是从一个包含整个对象的大立方体开始,然后测试八个子立方体中的每一个子立方体,哪些是完全外部的,哪些是完全内部的,哪些是内部和外部的。这些“中间”立方体将被递归细分

我的问题可能很愚蠢,但我想不出一种方法来求立方体和曲面的交点 CSG对象,以便能够如上所述对多维数据集进行分类

我的CSG结构是由立方体、球体和圆柱体(将来可能还有圆环)等基本体构建而成的,带有并集、交集和减法等布尔运算


除了CSG的显式树结构之外,从它的表示形式来看,我还有一种距离函数
d(x,y,z)
,它会告诉我点
(x,y,z)
是在外部(>0)还是在内部(听起来有点像你在试图重新发明稀疏体素八叉树

我的想法是以最好的立方体分辨率采样你想要考虑的(无论如何,你必须有一个分辨率截止)。 在Z阶曲线(也称为莫顿阶)上的点上采样距离函数并在每次距离函数改变符号时记下坐标。请注意,根据Z阶曲线的特性,此操作所需的存储空间应根据表面积而不是体积进行渐进缩放

这个结构在功能上相当于一个离散的八叉树(所以你可以想象它是这样使用的),因为Morton排序相当于八叉树的深度优先遍历

但关键是,使用这种结构,您可以通过对立方体角点的榫接坐标进行二元搜索来有效地测试八叉树立方体交点。注意,这样做时,八叉树对齐的立方体可以使用2个坐标来描述。我们将有一个“下”和一个“上”相对于莫顿阶的立方体角,且当且仅当间隔
(下,上)
。只要您选择原始采样分辨率足够精细,以至于单个CSG原语无法完全适合最小网格线,您就不会错过任何功能

明确地发现与立方体边界相交的关系稍微多一些,但相当可行。在我的记忆中,你必须考虑在立方体边界发生的符号变化,并考虑表面边界与立方体边界(也可能发生在完全满立方体上)的特殊情况。.我将把它作为练习留给读者,因为我已经有一段时间没有算出数学了。我只是想帮你更进一步