6

有没有人有任何好的实施策略或资源来组合 b-rep 建模系统?

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

我已经阅读了大量研究论文,虽然基础数学有助于理解为什么一切正常,但它给我留下了一些实施问题。

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

所以一些没有特定顺序的问题:

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

  2. 圆形面/曲面通常是如何实现的?例如,我读过的关于 b-rep 的一个基本介绍中的圆柱体在内部存储为棱镜。即一个挤压三角形和元数据存储在帽面周围,表示它们确实是圆形的。

  3. 布尔运算通常如何实现?我已经阅读了有关沿相交曲线生成 BSP-Tree 然后组合这些树以生成新几何图形的信息。还有其他方法可以实现布尔运算吗?他们有什么样的优点/缺点?

谢谢!

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

4

1 回答 1

1

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

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

我在这个主题上找到的最好的书:

于 2016-01-03T19:30:47.073 回答