Chapter 16 网格与实体

网格用三角形表现表面

图 16.1: 网格用三角形表现表面

像 FreeCAD 一类的工程应用通常把 3D 形状表现为实体模型。实体模型是能自我调整的对象,采用像 FreeCAD 中“边界表现/Boundary Representation”那样的格式,把形状的边界表现为完全封闭的空间,这些表面由数学式子描述,每一点都带有曲率。

实体模型对象的其他长处:

  • 它可以有质量信息
  • 很容易做类似融合和求差的布尔操作
  • 可以简单计算出一个点是在形状之内还是形状之外

实体模型对象的短处就是它们太耗费计算资源了。这些对象用于工程任务比较合适,要是用于有机体形状,或者有很多面的形状,渲染和计算性能就很糟糕了。

有一种广泛应用的格式可以替代实体模型,称为“网格/mesh”。网格对象相对简单,主要是由边连起来的顶点——3D空间中的点。这些边形成了封闭的三角形,称为“面/Face”。面通过它们的边连接起来形成封闭空间。不同于实体模型,面总是平的,所以弯曲的地方需要用更多的过渡面来作逼近模拟。

网格是轻量的对象,很容易处理和修整,尤其适用于动画和视觉类应用,那些形状动辄有成千上万甚至上百万个三角形。例如,有机体的形状可以表现为网格格式,后续渲染出美妙的细节,供电影动画使用。除渲染外的其他类型的计算大多很困难,甚至是不可能的。

表: (#tab:mesh-solid-compare) 网格与实体的比较

实体 网格
计算占用的资源
布尔数学运算 容易 困难
点的计算 容易 困难
质量
曲率 精确 逼近

关键经验

  • 把实体转换为网格很容易,反方向转换(网格转为实体)很困难。
  • 网格可能有缺失的面、洞、或其他错误,应该彻底检查和修复。
  • FreeCAD 的大多数功能不能直接使用网格,它们必须先转换成实体对象。

如果你用过像 GIMP 和 Inkscape 一类的 2D 艺术程序,你可能已经理解了光栅图和矢量图的区别。光栅图只有固定像素,基于行和列的像素数值。矢量图用纯粹的数学来描述形状。你可以在矢量图上凑近去看,看到多么详细都没有问题,它永远不会像素化,不会显得模糊。

谈到网格和实体,尤其是对曲面来说,道理是一样的。网格的分辨率有限,取决于创建时选择的三角形数量。实体对象用数学语言描述表面,所以它的分辨率不受限制。