1.网格 (Mesh) 完整讲解

网格(Mesh)完整讲解(结合你前面B‑Rep、OCCT、VTK整套知识)

核心一句话:B‑Rep是精确数学模型,只存在CPU内存,GPU看不懂;网格就是把B‑Rep的曲面拆成一堆小三角面片,专门给显卡渲染用的数据。

1. 什么是网格

网格由两大部分组成:

  1. 顶点(Vertex):三维空间坐标点(x,y,z)
  2. 面片(Face):大多是三角形,3个顶点拼成一个三角面,把曲面“贴满”。

一个曲面,不管是球面、圆柱面、复杂曲面,都没有办法直接交给OpenGL渲染。显卡天生只会画三角形。([[2.为什么一定是三角形,其他形状不行吗?]]) 所以就要把连续光滑的数学曲面,切成大量小三角,用无数小三角去“逼近”原来的曲面,这个过程叫网格化 / 细分 Tessellation。

举个例子:一个理想球体B‑Rep,数学公式是完美光滑;网格化之后,是几千上万个小三角拼出来的“多面体球”,三角越多,看着越圆。三角越少,棱角越明显。

2. B‑Rep VS Mesh 核心对比

B‑Rep(边界表示) Mesh网格
存储:曲面方程、曲线、拓扑(点/边/面连接关系) 存储:一堆顶点+三角面片,没有数学方程
精度:理论上数学精确 近似,永远是逼近真实形状
运行位置:CPU,OCCT内核管理 送往GPU,VTK/OpenGL用来绘制
可以做建模:布尔运算、倒角、拉伸、修改尺寸 不能做CAD建模,只能看,不能编辑几何
文件代表:STEP 文件代表:STL、OBJ、GLTF

⚠️关键认知:网格不是“另一个B‑Rep”,它只是B‑Rep的一张“照片”。 你修改原始B‑Rep,网格不会自动更新;必须重新跑一次网格化,才能得到新的三角数据。

3. 网格化(Tessellation细分)发生在什么时候

以OCCT举例: OCCT内部保存完整B‑Rep,本身不带网格。只有当你要显示到界面上的时候,才调用接口做细分,生成三角数据,再把三角交给VTK。

触发时机:

  1. STEP导入完成,B‑Rep构建成功,准备渲染显示
  2. 做完布尔运算、倒角、建模编辑,模型发生变化,需要重新网格化
  3. 放大模型视图,软件动态提高细分精度(有的软件支持视图自适应细分)

网格化有个核心参数:细分公差(Tessellation tolerance)

这个是新人最容易踩坑的点。

  • 公差越小:三角面片数量越多,曲面越光滑,内存占用高,渲染变慢
  • 公差越大:三角数量少,跑起来快,但是曲面会出现明显棱角失真

同样一个STEP文件,A软件看着很顺滑,B软件看着坑坑洼洼,很多时候不是模型坏了,仅仅是两者网格化公差设置不一样。

4. 两种完全不一样的修复,千万不要搞混(非常重要)

  1. B‑Rep修复(拓扑修复,OCCT做,CPU) 修复对象:顶点、边、面的拓扑关系,处理缝隙、非流形,保证布尔运算可以正常跑。 目标:修复原始精确模型,后续还能继续建模编辑。
  2. 网格修复(Mesh修复,VTK或者网格库做) 修复对象:三角面片本身。比如面片缺口、面片重叠、法向颠倒、面片交叉。 目标:只是为了渲染好看,或者3D打印;改完网格,原始B‑Rep一点没变。

很多新手踩坑:网格修复完看着模型完整,但是拿去做布尔运算依然报错。 原因:你只修了给显卡看的三角照片,底层真正的B‑Rep原始数据还是坏的。

5. 网格有哪些常见问题

  1. 曲面棱角失真:细分公差给太大,三角太少。
  2. 法向反转:三角面片有正反面,法向反了,渲染的时候这个面发黑看不见。
  3. 网格缝隙、孔洞:B‑Rep本身就有缝隙,网格化之后缝隙直接传递到三角面片上。
  4. 三角数量爆炸:公差设置过小,复杂零件直接生成几百万、上千万三角,界面卡顿。

6. 和整条链路串起来(对接你之前的完整流程)

STEP文件 → OCCT读取生成B‑Rep(CPU,精确几何)
        ↓(可选:B‑Rep修复,处理拓扑、非流形、容差问题)
        ↓【网格化Tessellation】把曲面拆成大量三角形
        ↓输出顶点+三角面片网格数据
VTK接收网格数据 → 底层调用OpenGL → GPU绘制到屏幕

7. 补充STL文件

STL就是纯粹的网格文件,完全没有B‑Rep信息。

  • 里面只有一大堆三角面片,没有拓扑,没有曲面方程。
  • 你导入STL到OCCT,得到的是一堆零散三角,不能直接做布尔运算;想要建模,还需要逆向把网格重新拟合回B‑Rep曲面,这个过程叫逆向重建,难度很高。

现实工程场景:STEP用于设计、编辑;STL多用于仿真、3D打印。

8. 留下两个思考题帮你巩固

  1. 如果我把STEP导入软件,模型显示看着完好,但是一跑布尔运算就失败,会是什么原因?
  2. 为什么同样一个零件,放大局部的时候,曲面突然出现锯齿棱角?

如果你想,接下来我可以讲容差Tolerance,或者讲装配Assembly。

posted @ 2026-08-24 16:10  Drunker•L  阅读(65)  评论(0)    收藏  举报