Mesh的平面切割算法

本文详细解析了Mesh的平面切割算法,通过将切割面转换到Local空间,判断每个Section与切割面的位置关系,处理相交情况,计算顶点距离,创建新三角形,并最终生成切割后的几何体。此算法适用于UE4,可用于实现静态和骨骼网格的切割,如全场景切割和断肢效果,类似Metal Gear Rising中的表现。
摘要由CSDN通过智能技术生成

看了一下UKismetProceduralMeshLibrary::SliceProceduralMesh的代码实现, 发现也没想像中的复杂, 只要把网格/三角形/顶点/边的关系理清楚, 逐步分解问题就可以把复杂问题给简化成一个个的小问题, 然后各个击破.
把注释和代码的步骤整理了一下, 变成了人话:

  1. 把切割面从World转换到Local空间
  2. 对于每个Section(SubMesh), 计算包围盒与切割面的关系
    1. 如果在背面, 移动到另一半(新产生Mesh)里去
    2. 如果在正面, 保留不动
    3. 如果相交, 创建两个空的Section1和Section2
      1. 对于每个顶点, 计算到切割面的距离
        1. 如果顶点在正面, 添加Index到Set1里
        2. 如果顶点在背面, 添加Index到Set2里
      2. 对于每个三角形(三个index)
        1. 如果三个顶点都在Set1里, 把三角形加到Section1
        2. 如果三个顶点都在Set2里, 把三角形加到Section2
        3. 如果三角形与切割面相交, 需要创建一两个新的三角形
          1. 对于三角形的每条边
            1. 如果起点在正面, 加到SliceSet1, 否则加到SliceSet2
            2. 如果终点跟起点不在一边
              1. 求边与平面的交点, 生成一个新的顶点
              2. 把新的顶点分别加到两个Section里, 并更新包围盒
          2. 分别对两边的顶点(不超过4个)生成三角形, 加到对应的Section里
          3. 如果有两条边相交, 那么新生成的两个顶点会生成一条新边, 记录下来
      3. 如果Section里没有东西, 那就可以把这个Section舍弃
    </
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值