[算法]3D三角面片与包围盒相交交点求法

最近在研究复制包围盒内相交网格的问题,有一个要解决的难题就是获得一个任意三角面片与指定包围盒的交点。现将问题简化为2D空间,

假设现有三角形面片ABC(以下都简称ABC):, 包围盒DEFG,

那么三角面与包围盒的位置关系有几种:

ABC一个点在包围盒内部:

ABC两个点在包围盒内部

ABC3个点都在包围盒内部

ABC3个点都在包围盒外部,但仍有相相交



对于以上各种姿势,我们现在要用一个统一的算法,求出相交的多边形顶点。如下绿色多边形的4个顶点:


对于程序算法,求图形相交的基本思想是:逐面筛选。对包围盒6个面(这边简化为2D,只有上下左右4个),我们将它视为无限扩展的平面(因为程序和数学表现无限平面很简单),并给它一个向外的法线方向,以判断点相对于平面的位置。在此基础上,我们开始算法流程:

1:建立表达多边形的数据结构Polygon类,存放多边形每个顶点信息。平面的类Unity自带Plane类,并封装了相关计算函数。

2:创建初始多边形 = 三角面ABC

3:对每个面,我们计算输入的多边形被面切割后的新多边形,如对于面GF,

, 

切割后,算出的新多边形为HICB


这样每个面都切割筛选一遍后,就能得到最终相交的多边形HIJK


对其他任意姿势,这个方法都能得到正确的相交多边形。扩展到3D空间同样适用。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值