SRaD said:
Winged edge data structures seem to be used quite often
AFAIK, winged edge has the same manifold ‘limitation’ than half edge, though i never used it so not sure. (I think Winged edge uses only one struct per edge, while half edge uses two for each side. But winged also assumes an edge can only be adjacent to two faces, so it's restricted to manifold as well.)
You really should tell us more about your requirements and application, otherwise it's hard to help.
What are the non manifold cases you need to support? Maybe, after some talk it would turn out you can do what you want while still using OpenMesh. (I'm pretty sure that's the case.)
Here are some examples, and how to resolve them:
- Extruding a face from a closed edge. Imagine you have mesh of a sphere, and you take one edge and want to extrude a quad out of it, eventually so you can add hair or foliage details using alpha tested texture.
To do this using manifold mesh, you can either: Duplicate the edge including the vertices and create the face from that (face so is disconnected from the sphere mesh and no non-manifold situation comes up.)
Or: Open the edge and actually add 2 quads (front and back face). Then the new quads are connected to the sphere surface and it's correctly manifold. And you can use usual backface culling to draw only the quad that is facing the camera at runtime. - Making two objects touch at a single vertex. Imagine two cubes, and they should share one of their corner vertices each. This is not possible using half edge, but you can just duplicate the vertex.
In fact the only cases that require non manifold mesh data structure are impossible objects like Moebius Strip or Klein Bottle. But nobody would need stuff like that for games. Collision detection would not work either, etc.