实现边界表示建模

kly*_*lyd 6 math graphics model brep

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

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

我已经阅读了相当多的研究论文,虽然基础数学对于理解一切正常的原因很有用,但它给我留下了一些实现问题。

所述边缘数据结构似乎是约在B-REP实现主体存储信息的首选方式。

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

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

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

  3. 布尔运算通常是如何实现的?我已经阅读了关于沿相交曲线生成 BSP 树,然后组合这些树以生成新几何的信息。是否有其他方法来实现布尔运算?它们有哪些优点/缺点?

谢谢!

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

Max*_*nce 2

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

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

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