Halfedges and Edgeuses, Harmful or Useful? Designing effcient data structures for geometry processing.

Bruno Levy. ( 2015 )
in: 35th Gocad Meeting - 2015 RING Meeting, ASGA

Abstract

I discuss some aspects related with algorithm design and programming for mesh generation, with a special focus on the role of abstraction. Abstraction often makes things easier by separating the different aspects of a concept (for instance, a C++ class separates the interface of an object from its implementation). However, an excessive use of abstraction sometimes separates things that should have been considered together. My point of view will be illustrated with several examples, including the design of the Linux kernel, and the design of the OpenSource GEOGRAM programming library. Choosing the right level of abstraction at the right place results in a code that is shorter, faster, easier to understand, and that consumes a significantly smaller amount of memory. I will demonstrate this idea with several geometric algorithms, including mesh data structures, Delaunay triangulation, and spatial search data structures (KdTree, AABBTree), scaling up to tens of millions primitives on an off-the-shelf laptop PC. In addition, this point of view facilicates interfacing graphic libraries (such as OpenGL). I will explain how to make use of recent possibilities of the hardware while preserving portability through different levels of GPU support. Fast display of triangulated mesh, polygonal mesh, tetrahedral mesh, hybrid polyhedral mesh with advanced clipping will be demonstrated, implemented with both GLSL 1.5 and GLSL 4.4 shaders. The implementation is available in the MeshGfx class of the OpenSource GEOGRAM programming library (also used in RingMesh).

Download / Links

BibTeX Reference

@inproceedings{Lévy2GM2015,
 abstract = { I discuss some aspects related with algorithm design and programming for mesh generation, with a special focus on the role of abstraction. Abstraction often makes things easier by separating the different aspects of a concept (for instance, a C++ class separates the interface of an object from its implementation). However, an excessive use of abstraction sometimes separates things that should have been considered together. My point of view will be illustrated with several examples, including the design of the Linux kernel, and the design of the OpenSource GEOGRAM programming library. Choosing the right level of abstraction at the right place results in a code that is shorter, faster, easier to understand, and that consumes a significantly smaller amount of memory. I will demonstrate this idea with several geometric algorithms, including mesh data structures, Delaunay triangulation, and spatial search data structures (KdTree, AABBTree), scaling up to tens of millions primitives on an off-the-shelf laptop PC. In addition, this point of view facilicates interfacing graphic libraries (such as OpenGL). I will explain how to make use of recent possibilities of the hardware while preserving portability through different levels of GPU support. Fast display of triangulated mesh, polygonal mesh, tetrahedral mesh, hybrid polyhedral mesh with advanced clipping will be demonstrated, implemented with both GLSL 1.5 and GLSL 4.4 shaders. The implementation is available in the MeshGfx class of the OpenSource GEOGRAM programming library (also used in RingMesh). },
 author = { Levy, Bruno },
 booktitle = { 35th Gocad Meeting - 2015 RING Meeting },
 publisher = { ASGA },
 title = { Halfedges and Edgeuses, Harmful or Useful? Designing effcient data structures for geometry processing. },
 year = { 2015 }
}