繁体   English   中英

从3D网格生成2D横截面多边形

[英]Generate 2D cross-section polygon from 3D mesh

我正在编写一个游戏,该游戏使用3D模型绘制场景(自上而下的正投影),但使用2D物理引擎来计算对碰撞的反应等。我希望获得一些3D资源通过将3D网格与XY平面“切片”并从生成的边创建多边形,自动生成匹配盒。

Google在这方面让我失望(也没有关于SO的有用材料)。 有什么建议吗?

我正在处理的网格将是所显示模型的简化版本,这些模型是连接的,闭合的,非凸的并且具有零属。

由于您的网格不是凸形的,因此所产生的横截面可能会断开,因此实际上包含多个多边形。 这意味着必须检查每个三角形,因此对于n个三角形,您至少需要进行O(n)次运算。

这是一种实现方法:

T <- the set of all triangles
P <- {}
while T is not empty:
  t <- some element from T
  remove t from T
  if t intersects the plane:
    l <- the line segment that is the intersection between t and the plane
    p <- [l]
    s <- l.start
    while l.end is not s:
      t <- the triangle neighbouring t on the edge that generated l.end
      remove t from T
      l <- the line segment that is the intersection between t and the plane
      append l to p
    add p to P

这将在O(n)个时间中对n个三角形运行,前提是您的三角形具有指向三个邻居的指针,并且T支持固定时间删除(例如,哈希集)。

与所有几何算法一样,细节在于魔鬼。 例如,仔细考虑三角形的顶点恰好在平面中的情况。

您可以通过找到与平面相交的所有多边形,然后找到相交的精确线段,来进行一系列几何处理。 这些线段就是您要查找的2D多边形的线。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM