Generate 2D cross-section polygon from 3D mesh

后端 未结 2 1677
-上瘾入骨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:08

    You can do this with abit of geometry by finding all of the polygons which intersect with the plane and then finding the exact segment of the intersection. these segments are the lines of the 2D polygon you're looking for.

    0 讨论(0)
  • 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.

    0 讨论(0)
提交回复
热议问题