日期:2023年10月5日标签:ComputerGraphics

Constructive Solid Geometry(构造立体几何法) #

Constrcutive Solid Geometry,中文翻译为构造立体几何法,简称为 CSG。是与 B-rep 不同的另一种几何实体模型表示方法。本篇内容主要介绍与之相关联的一些基础概念。不涉及详细的构造算法。

将一些 基础实体(primitive solids) 通过 布尔运算(union,intersection,differrence) 组合成一个复杂的实体的过程,就是 CSG 造体过程。

基础实体(Primitives) #

标准的 CSG Primitives 共 6 种:立方体(cube),三棱柱(triangular prism),球体(sphere),圆柱体(cylinder),圆锥体(cone)和圆环(torus)。将这 6 种基础实体变换(例如缩放,平移和旋转)到合适的位置,然后再做布尔运算即可得到复杂实体,这个过程就是 CSG。

CSG 的描述过程可以简记为一个 CSG 表达式:

translate(scale(Block, <2.5, 1.5, 1.5>), <3, 2, 3>)

上面的 CSG 公式表示将 Block 的 x,y,z 分量分别缩放 2.5,1.5,1.5 倍后,然后将 Block 的位置的 x,y,z 坐标分别加 3,2,3 以实现平移。

一般操作用如下符号表示:

  • translate:平移
  • scale:缩放
  • rotate:旋转

布尔操作(Boolean Operators) #

给定两个点集合 A 和 B,A 和 B 之间的布尔操作包括:

  • union(并集):A 和 B 的并集表示 A 和 B 所有点组合在一起的集合 C,集合 C 中任意一点要么属于 A 要么属于 B,记 A ∪ B
  • difference(差集):A 和 B 的差集构成集合 C,集合 C 中任意一点必定属于 A 但是不属于 集合 B,记作 A - B
  • intersection(交集):A 和 B 的交集构成集合 C,集合 C 中任意一点必定属于 A 也必定属于 B,记作 A ∩ B

下图中,A 是竖直的圆柱体,B 是水平的圆柱体,从左至右依次为:A ∪ BA ∩ BA - B, B - A

Boolean Operators

因此,实体可以被视为将布尔运算符应用于一组基础实体的结果。

让我们看一个简单的例子。我们想要设计一个类似括号的形状,带有一个孔,如下图最右图所示。我们从两个块实例和一个圆柱体实例(最左边的图)开始。然后,缩放两个块并将其中一个旋转到垂直位置。圆柱体也进行了缩放,使其半径与孔的半径相匹配。然后,这三个实例被转换到它们想要的位置。通过计算两个块的并集,然后从中减去圆柱体,获得最终的产品。

Boolean Operators

上述布尔过程并不是唯一的。例如,L 形状可以通过将一个立方体减去另一个立方体来构造。

CSG 表达式和 CSG 树 #

上述的布尔过程可以用一个 CSG 表达式表示:

diff(union(trans(Block1), trans(Block2)), trans(Cylinder))

也可以转换为一棵 CSG 树:

csg expression tree

每种 CSG 构造过程都可以用 CSG 表达式表示,也可以用 CSG 表达式树表示。

(完)

目录