看了一下UKismetProceduralMeshLibrary::SliceProceduralMesh的代码实现, 发现也没想像中的复杂, 只要把网格/三角形/顶点/边的关系理清楚, 逐步分解问题就可以把复杂问题给简化成一个个的小问题..., 然后各个击破....把注释和代码的步骤整理了一下, 变成了人话:
把切割面从World转换到Local空间
对于每个Section(SubMesh), 计算包围盒与切割面的关系
如果在背面, 移动到另一半(新产生Mesh...Section舍弃
根据记录的新生成的边, 创建截面几何体
把3D空间的边投影到切割面上, 变成2D空间的边
根据2D边的集合生成封闭的多边形
对多边形进行三角形化, 并生成UV
把生成的截面三角形分别生成两个新的...Section, 并关联切割面的材质
针对碰撞体也做一遍类似的切割操作, 生成新的凸包碰撞体
对切下来的另一半, 生成新的MeshComponent
引擎的功能使用很简单, 见https://www.youtube.com