Generate 2D cross-section polygon from 3D mesh

后端 未结 2 1675
-上瘾入骨i
-上瘾入骨i 2021-01-02 05:23

I\'m writing a game which uses 3D models to draw a scene (top-down orthographic projection), but a 2D physics engine to calculate response to collisions, etc. I have a few 3

2条回答
  •  孤街浪徒
    2021-01-02 06:11

    Since your meshes are not convex, the resulting cross-section may be disconnected, so actually consist of multiple polygons. This means that every triangle must be checked, so you'll need at least O(n) operations for n triangles.

    Here's one way to do it:

    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
    

    This will run in O(n) time for n triangles, provided that your triangles have pointers to their three neighbours, and that T supports constant-time removals (e.g. a hash set).

    As with all geometric algorithms, the devil is in the details. Think carefully about cases where a triangle's vertex is exactly in the plane, for example.

提交回复
热议问题