While I was working on a simple feature of translating and updating my AABB trees, I got dragged into fixing, simplifying, removing and refactoring some things.
Removing support for UVs withing my building tool since keeping tally of that information just invites complications I don’t want. Unifying mesh concepts and objects so that there is really only one mesh object that is passed between the client and builder and any runtime mesh object is just handled by the client and cached by the client.
The mesh object that gets passed between the client and builder is fat and juicy. Has lots of information so that you can derive all the needed configuration and setup you need from it. All the vertices are shared, so it is very easy to test if the mesh is actually solid. Groups, keep information about materials, colors and smoothing of normals. Triangle structures, reference groups and cache their center of mass and AABB data, so that they can easily be tested for self/bi- intersections by narrow phase collision tests and used as leafs in AABB trees for broad phase collision tests.
An array of topology markers are exported as indicators for tessellation simplification, marking each vertex as on a plane, edge or a point. Not used at the moment.
And a few derived structures as the AABB tree and an edge map from every edge to its neighboring polygon to query for solidity or to assist with decimation of the triangulated surface.
Exposing more data to the client so that more interesting things can be easily achieved and removing some responsibility from the builder that it really does not need to worry about and should just keep doing what it does well, and hand over as much of the data you might find useful and allows you to derive the target information without any assumption about how it might be used.
Time to grab another Christmas beer and keep working.