TL;DR: Definition of a half-edge data structure in cuda.

Info! Unfinished notes

I am a big fan of simple data structures like the ones used in libIGL (a N by 3 matrix of doubles for vertices and a M by 3 matrix of integers for faces). However, these data structures can not be used for efficient circulation through the faces (e.g., finding the neighbouring faces of a face is hard).

An alternative is to embrace a more complexe data structure that is more complex to define and use more memory for storing but does provide more flexibility to travel through the mesh. Amongst the popular data structures, halfedges structures are memory efficient but also offer powerful ways to travel on a mesh.

Half-Edge data structures definition

From the documentation of OpenMesh.

halfedge structure

  • Each vertex references one outgoing halfedge, i.e. a halfedge that starts at this vertex (1).
  • Each face references one of the halfedges bounding it (2).
  • Each halfedge provides a handle to
    • the vertex it points to (3),
    • the face it belongs to (4)
    • the next halfedge inside the face (ordered counter-clockwise) (5),
    • the opposite halfedge (6),
    • (optionally: the previous halfedge in the face (7)).