【问题标题】:Constructive Solid Geometry vs Boundary Representation构造实体几何和边界表示
【发布时间】:2014-11-18 20:40:18
【问题描述】:

我想在非凸多面体对象上实现布尔运算,并想用 OpenGL 渲染它们。我已经阅读了对多面体进行布尔运算的两种主要技术:边界表示(BReps)和构造实体几何(CSG)。 根据一些论文,使用 CSG 实现布尔值应该更容易,所以我考虑使用 CSG 而不是 BReps。 我知道 BReps 通过顶点和多边形来描述几何图形,而 CSG 使用基本的原始对象,例如在树结构中组合的圆柱体或球体。 我知道在 BReps 上执行布尔值是通过切割相交的多边形并删除那些不需要的多边形来实现的(取决于操作是联合还是差异或......)。 但是在 CSG 方面,布尔运算是如何实现的呢?如何实现 CSG 布尔运算?我已经在互联网上查看过,例如 http://evanw.github.io/csg.js/https://www.andrew.cmu.edu/user/jackiey/resources/CSG/CSG_report.pdf 奇怪的是,这些算法只使用 BReps 作为布尔值。所以我不明白 CSG 的优势应该在哪里,或者为什么 CSG 布尔值应该更容易实现。

【问题讨论】:

    标签: computational-geometry csg


    【解决方案1】:

    你不知何故在谈论苹果和梨。

    CSG 是一种从原始实体描述复杂实体的通用方法,如果您愿意,它是实体的“算术”。此过程与这些实体的精确表示无关。替代/互补建模技术的示例包括无曲面生成、广义圆柱体、代数方法......

    BRep 是实体的一种可能表示形式,基于顶点/边/面图结构。一些替代表示是空间占用模型,例如体素和八叉树。

    通常,CSG 表达式使用现有的表示进行评估;在某些情况下,原始的 CSG 树会保持原样,在叶子上有基本的原语。

    多面体 BRep 模型在概念上易于实现;无论如何,CSG 表达式求值是艰巨的(多面体交叉会引发令人不安的数值和拓扑问题)。

    BRep 的渲染需要对面进行三角剖分,然后可以通过标准渲染管道进行处理。

    体素模型既易于实现又使 CSG 表达式易于处理;另一方面,它给出了形状的粗略近似。

    原始 CSG 树可用于通过光线追踪技术进行直接渲染:在通过光线遍历所有图元后,您可以使用 CSG 表达式组合光线部分。这种方法结合了相对简单的实现和准确性,但代价是高昂的计算成本(所有内容都需要在图像的每个像素和每个视图上重复)。

    【讨论】:

      【解决方案2】:

      CSG 模型仅表示应用于转换后的原语的所需操作(联合、交叉等)。它并没有真正修改基元(例如修剪立方体的角)。您可以看到屏幕上显示复杂模型的原因是渲染引擎正在发挥作用。显示 CSG 模型时,通常有两种方法:第一种方法是即时将其转换为 Brep 模型,第二种方法是使用 CSG 直接显示算法,该算法通常基于扫描线算法。

      所以,如果你已经有了一个好的 CSG 渲染引擎,那么你就不用担心修剪 Brep 模型了,你的生活确实更轻松了。但是如果你必须自己编写渲染引擎,那么使用 CSG 并不会节省那么多时间。

      【讨论】:

        【解决方案3】:

        在我看来,CSG 一点也不轻松

        • 但它更精确
        • 没有使用过的圆柱体、球体...
        • 而是使用曲线的旋转表面

        对 CSG 的操作

        • 如果您在具有相同轴的旋转表面上执行(布尔)操作
        • 那么您只需对曲线进行操作...(这是 CSG 优于 BRep 的地方)
        • 当轴不相同时,您必须在 CSG 树中创建新条目
        • 也可以通过简单地更新它们的大小来完成对兼容对象的操作(例如具有相同连接/相交表面的框连接/切割)...
        • 但大多数实现都不会这样做,而是将每个操作都存储到树中
        • 在树中发生任何变化后渲染都会变慢
        • 渲染器还必须在渲染或预渲染阶段而不是在它自己的操作期间执行所有操作
        • 这使得 CSG 实施更加复杂。
        • 我看到的唯一优势是模型可以具有解析表示
        • 这要准确得多,尤其是在多个操作之上...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-01
          • 1970-01-01
          • 2014-12-12
          • 1970-01-01
          • 2011-08-01
          • 2014-10-12
          相关资源
          最近更新 更多