Chapter 16 网格与实体
像 FreeCAD 一类的工程应用通常把 3D 形状表现为实体模型。实体模型是能自我调整的对象,采用像 FreeCAD 中“边界表现/Boundary Representation”那样的格式,把形状的边界表现为完全封闭的空间,这些表面由数学式子描述,每一点都带有曲率。
实体模型对象的其他长处:
- 它可以有质量信息
- 很容易做类似融合和求差的布尔操作
- 可以简单计算出一个点是在形状之内还是形状之外
实体模型对象的短处就是它们太耗费计算资源了。这些对象用于工程任务比较合适,要是用于有机体形状,或者有很多面的形状,渲染和计算性能就很糟糕了。
有一种广泛应用的格式可以替代实体模型,称为“网格/mesh”。网格对象相对简单,主要是由边连起来的顶点——3D空间中的点。这些边形成了封闭的三角形,称为“面/Face”。面通过它们的边连接起来形成封闭空间。不同于实体模型,面总是平的,所以弯曲的地方需要用更多的过渡面来作逼近模拟。
网格是轻量的对象,很容易处理和修整,尤其适用于动画和视觉类应用,那些形状动辄有成千上万甚至上百万个三角形。例如,有机体的形状可以表现为网格格式,后续渲染出美妙的细节,供电影动画使用。除渲染外的其他类型的计算大多很困难,甚至是不可能的。
表: (#tab:mesh-solid-compare) 网格与实体的比较
实体 | 网格 | |
---|---|---|
计算占用的资源 | 重 | 轻 |
布尔数学运算 | 容易 | 困难 |
点的计算 | 容易 | 困难 |
质量 | 有 | 无 |
曲率 | 精确 | 逼近 |
关键经验
- 把实体转换为网格很容易,反方向转换(网格转为实体)很困难。
- 网格可能有缺失的面、洞、或其他错误,应该彻底检查和修复。
- FreeCAD 的大多数功能不能直接使用网格,它们必须先转换成实体对象。
如果你用过像 GIMP 和 Inkscape 一类的 2D 艺术程序,你可能已经理解了光栅图和矢量图的区别。光栅图只有固定像素,基于行和列的像素数值。矢量图用纯粹的数学来描述形状。你可以在矢量图上凑近去看,看到多么详细都没有问题,它永远不会像素化,不会显得模糊。
谈到网格和实体,尤其是对曲面来说,道理是一样的。网格的分辨率有限,取决于创建时选择的三角形数量。实体对象用数学语言描述表面,所以它的分辨率不受限制。