实现边界表示建模

7

有人有关于编写b-rep建模系统的良好实施策略或资源吗?

OpenCascade是一个似乎很好的b-rep建模库(被FreeCad和PythonOCC都广泛使用),但该库庞大、复杂,可能不是学习b-rep建模“引擎”的好起点。

我已经阅读了相当多的研究论文,虽然基本数学知识对于理解一切的工作很有用,但还是让我有了一些实现问题。

半边结构数据结构似乎是存储b-rep实现中有关物体信息的首选方式。

因此,以下是一些无特定顺序的问题:

  1. 使用半边数据结构,通常如何实现渲染?基于物体边界的三角剖分?

  2. 通常如何实现圆形面/曲面?例如,在我读过的一篇基本介绍b-rep的文章中,一个圆柱体被内部存储为一个棱柱。即一个三角形拉伸而成,并存储有关盖面的元数据,表示它们确实是圆形。

  3. 通常如何实现布尔运算?我了解到可以沿着交点曲线生成BSP树,然后组合这些树以生成新几何体。还有其他实现布尔运算的方法吗?它们的优缺点是什么?

谢谢!

如果您想提供代码示例,请不用担心语言——问题更多涉及算法/数据结构实现细节


我不确定,但我认为这可能是一个适合在http://programmers.stackexchange.com上提问的好问题。 - Mr.Wizard
2
好的,这个问题可能适合于几个领域:cstheory.stackexchange.com、math.stackexchange.com。尽管我认为程序员更多地是关于专业讨论而不是代码。 - klyd
我不常在_programmers_上活跃,但我认为这个问题需要讨论一个主题而不是一个具体的答案,我认为这更接近于_programmers_的FAQ描述。 - Mr.Wizard
1个回答

2

我正在使用C#开发一个B-Rep建模器(现在还处于非常早期的阶段:这是一个巨大的项目),所以我也有一些和您一样的问题。以下是我的答案:

  1. 三角剖分: 我还没有完成这一步,但我考虑的策略如下: 把面边界投影到参数空间中,得到2D多边形(带洞),用耳剪法对其进行三角剖分,然后将三角形顶点重新投影到3D空间。对于曲面,我需要使用网格来分割多边形以跟随曲面;
  2. 对于圆柱体,有3个边缘: 两个圆形和一个线段。我为每种类型的曲线(Segment3d, Circle3d等)都创建了类,每个半边保持其中一个类的实例。每个面保持一个表面对象的实例(平面、圆柱、球体...);
  3. 有一个有趣的项目在这里基于BSP-Tree,但它使用的是CSG方法,而不是B-rep。我仍在研究如何做到这一点,但我认为我不需要BSP树。困难在于计算交点和拓扑。

我发现的关于这个主题最好的书:


“边界表示建模技术”怎么样? - Ivan Z

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接